c#webapi POSTパラメータ解決方法

3260 ワード

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"}です.サービス側はオブジェクトに自動的にマッピングされます.
送信コードは次のとおりです.
            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