zoukankan      html  css  js  c++  java
  • c# webapi POST 参数解决方法

    HttpWebRequest POST请求webapi:如果参数是简单类型,比如字符串(注意,拼接的字符串要HttpUtility.UrlEncode才行,否则服务端会丢失特殊字符&后面的数据)

    要点:如下代码统一设置为:ContentType = "application/x-www-form-urlencoded";

    服务端代码1:URL格式为 POSTapi/Values

    public string Post([FromBody] string value)

    则客户端Post的数据:拼接的字符串必须以 =开头,否则服务端无法取得value。例如:=rfwreewr2332322232 或者 {'':value}

    服务端代码2:URL格式为 POST api/Values?value={value}

    public string Post(string value)

    则客户端Post的数据:需要url里拼接出KeyValue这样的数据

    服务端代码3:URL格式为 POST api/Values

    public string Post()

    则客户端Post的数据:无要求。例如:key=rfwreewr2332322232。

    服务端:可以用HttpContext.Current.Request.InputStream或者HttpContext.Current.Request.Form[0]都可以获取

    如果post的参数类型比较复杂,则需要自定义类

    要点:如下代码统一设置为:ContentType = "application/json";

    服务端代码1:URL格式为 POST api/Values

    public string Post([FromBody] Model value)或者 public string Post(Model value)

    则客户端Post的数据:{"id":"test1","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;  
    }  
    

      

  • 相关阅读:
    原来这才是 Socket !
    C 语言基础,来喽!
    手把手教你汇编 Debug
    拒做技术小白?计算机关键概念你不得不掌握!
    利用Windbg分析Magicodes.IE一次错误编写导致内存剧增
    Spring Boot整合JApiDocs实现API文档
    Spring Boot 快速整合Swagger
    Python测试框架pytest入门基础
    性能测试之测试分析与调优
    html5调用摄像头截图
  • 原文地址:https://www.cnblogs.com/jake-ge/p/7008643.html
Copyright © 2011-2022 走看看