| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
67 バイト追加 、 2020年2月15日 (土) 08:00
編集の要約なし
public static class Extensions
public static void PostFormAsync(this HttpWebRequest request, object parameters, AsyncCallback callback) { request.Method = "POST"; request.ContentType = "applicatio n/x-www-form-urlencoded"; request.BeginGetRequestStream(new AsyncCallback(asyncResult => > { Stream stream = request.EndGe tRequestStream(asyncResult); DataContractQueryStringSerial izer ser = new DataContractQueryStringSeria lizer(); ser.WriteObject(stream, param eters); stream.Close(); request.BeginGetResponse(call back, request); }), request); }
public static void PostMultiPartAsync (this HttpWebRequest request, object parame ters, AsyncCallback callback) { request.Method = "POST"; string boundary = "---------------" + DateTime.Now.Ticks.ToString(); request.ContentType = "multipart/form-data; boundary=" + boundary; request.BeginGetRequestStream(new AsyncCallback(asyncResult => > { Stream stream = request.EndGe tRequestStream(asyncResult);
DataContractMultiPartSerializ er ser = new DataContractMultiPartSerialize r(boundary); ser.WriteObject(stream, param eters); stream.Close(); request.BeginGetResponse(call back, request); }), request); }
public class DataContractQueryStringSeria lizer
public void WriteObject(Stream stream , object data) { StreamWriter writer = new StreamW riter(stream); if (data != null) { if (data is Dictionary<&lt;string , string>&gt;) { foreach (var entry in dat a as Dictionary<&lt;string, string>&gt;) { writer.Write("{0}={1} &", entry.Key, entry.Value); } } else { foreach (var prop in data .GetType().GetFields()) { foreach (var attribut e in prop.GetCustomAttributes(true)) { if (attribute is DataMemberAttribute) {
ribute member = attribute as DataMemberAttr ibute;
<&lt;blockquote>&gt;0}={1}&", member.Name ?? prop.Name, prop. GetValue(data)); } } } foreach (var prop in data .GetType().GetProperties()) { if (prop.CanRead) { foreach (var attr ibute in prop.GetCustomAttributes(true)) {<&lt;/blockquote>&gt;
is DataMemberAttribute)
FileInfo f = value as Fil eInfo; writer.WriteLine(@"Conten t-Disposition: form-data; name=""{0}""; fil ename=""{1}""", key, f.Name); writer.WriteLine("Content -Type: application/octet-stream"); writer.WriteLine("Content -Length: " + f.Length); writer.WriteLine(); writer.Flush(); Stream output = writer.Ba seStream; Stream input = f.OpenRead
byte[] buffer = new byte[ 4096]; for (int size = input.Rea d(buffer, 0, buffer.Length); size > &gt; 0; size = input.Read(buffer, 0, buffer.Length)) { output.Write(buffer, 0, size); } output.Flush(); writer.WriteLine(); } else { writer.WriteLine(@"Conten t-Disposition: form-data; name=""{0}""", ke
writer.WriteLine(); writer.WriteLine(value.To String()); } } }
public void WriteObject(Stream stream , object data) { StreamWriter writer = new StreamW riter(stream); if (data != null) { if (data is Dictionary<&lt;string , object>&gt;) { foreach (var entry in dat a as Dictionary<&lt;string, object>&gt;) { WriteEntry(writer, en try.Key, entry.Value); } } else { foreach (var prop in data .GetType().GetFields()) { foreach (var attribut e in prop.GetCustomAttributes(true)) { if (attribute is DataMemberAttribute) {
ribute member = attribute as DataMemberAttr ibute;
The usage is as follows: First a PHP file
<&lt;?php print_r($_REQUEST); $src = $_FILES['y']['tmp_name']; $dest = "C:\\Windows\\Temp\\".$_FILES['y'][ 'name']; echo $src; echo "\r\n"; echo $dest; echo @copy($src, $dest);
Then the Page control
public partial class Page : UserControl
public Page() { InitializeComponent(); // Create a request object HttpWebRequest request = (HttpWeb Request)WebRequest.Create(new Uri("http://l ocalhost/rms/test.php")); OpenFileDialog dlg = new OpenFile Dialog(); if (dlg.ShowDialog().Value) { request.PostMultiPartAsync(ne w Dictionary<&lt;string, object> &gt; { { "x", "1" } , { "y", dlg.File } }, new AsyncCallback(as yncResult => &gt; { HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(a syncResult);
Stream responseStream = r esponse.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); this.Dispatcher.BeginInvo ke(delegate { // output is a TextBl
Since it is able to serialize data contract, you could actually replace
new Dictionary<&lt;string, object> &gt; { { "x", "1" }, { "y", dlg.File } }
new Point(){X=1, Y=2}
given the point class is like this:
[[DataContract]] public class Point
[[DataMember] public int X { get; set; } [DataMember(Name="y")]] public int Y { get; set; }

案内メニュー