c#webapi POSTパラメータ解決方法
HttpWebRequest POSTリクエストwebapi:パラメータが単純なタイプの場合(文字列など)
要点:ContentType="アプリケーション/x-www-form-urlencoded";
サービス側コード1:URL形式はPOSTapi/Value
public string Post([FromBody] string value)
クライアントPostのデータ:接続された文字列は=で始まる必要があります.そうしないと、サービス側はvalueを取得できません.例:=rfwreewr 23332322232または{':value}
サービス側コード2:URL形式はPOST api/Value?value={value}
public string Post(string value)
クライアントPostのデータ:urlの中でKeyValueのこのようなデータをつなぎ合わせる必要があります
サービス側コード3:URL形式はPOST api/Value
public string Post()
クライアントPostのデータ:要求なし.例えば、key=rfwreewr 23332322232.
サービス側:HttpContext.Current.Request.InputStreamまたはHttpContext.Current.Request.Form[0]はすべて取得できます
postのパラメータタイプが複雑な場合は、クラスをカスタマイズする必要があります.
要点:ContentType="アプリケーション/json";
サービス側コード1:URL形式はPOST api/Value
public string Post([FromBody]Model value)またはpublic string Post(Model value)
クライアントPostのデータ:{id":test 1","name":value"}です.サービス側はオブジェクトに自動的にマッピングされます.
送信コードは次のとおりです.
この文章にはいくつかの方法もあります.http://www.cnblogs.com/rohelm/p/3207430.html
要点:ContentType="アプリケーション/x-www-form-urlencoded";
サービス側コード1:URL形式はPOSTapi/Value
public string Post([FromBody] string value)
クライアントPostのデータ:接続された文字列は=で始まる必要があります.そうしないと、サービス側はvalueを取得できません.例:=rfwreewr 23332322232または{':value}
サービス側コード2:URL形式はPOST api/Value?value={value}
public string Post(string value)
クライアントPostのデータ:urlの中でKeyValueのこのようなデータをつなぎ合わせる必要があります
サービス側コード3:URL形式はPOST api/Value
public string Post()
クライアントPostのデータ:要求なし.例えば、key=rfwreewr 23332322232.
サービス側:HttpContext.Current.Request.InputStreamまたはHttpContext.Current.Request.Form[0]はすべて取得できます
postのパラメータタイプが複雑な場合は、クラスをカスタマイズする必要があります.
要点:ContentType="アプリケーション/json";
サービス側コード1:URL形式はPOST api/Value
public string Post([FromBody]Model value)またはpublic string Post(Model value)
クライアントPostのデータ:{id":test 1","name":value"}です.サービス側はオブジェクトに自動的にマッピングされます.
送信コードは次のとおりです.
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://localhost:37831/api/Values");
wReq.Method = "Post";
//wReq.ContentType = "application/json";
//wReq.ContentType = "application/x-www-form-urlencoded";
wReq.ContentType = "application/json";
//byte[] data = Encoding.Default.GetBytes(HttpUtility.UrlEncode("key=rfwreewr2332322232&261=3&261=4"));
byte[] data = Encoding.Default.GetBytes("{\"id\":\"test1\",\"name\":\"value\"}");
wReq.ContentLength = data.Length;
Stream reqStream = wReq.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
using (StreamReader sr = new StreamReader(wReq.GetResponse().GetResponseStream()))
{
string result = sr.ReadToEnd();
}
サービスセグメントコードは次のとおりです. // POST api/values
//public string Post()
//{
// FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log.txt");
// StreamWriter sw = fi.CreateText();
// StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream);
// sw.WriteLine("1:" + sr.ReadToEnd()+"--"+ HttpContext.Current.Request.Form[0]);
// sw.Flush();
// sw.Close();
// return "{\"test\":\"1\"}";
//}
// POST api/values
public HttpResponseMessage PostStudent(Student student)
{
FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log.txt");
StreamWriter sw = fi.AppendText();
sw.WriteLine("2:" + student.id);
sw.Flush();
sw.Close();
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent("{\"test\":\"2\"}", Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}
この文章にはいくつかの方法もあります.http://www.cnblogs.com/rohelm/p/3207430.html