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;  
    }  
    

      

  • 相关阅读:
    【C语言】23typedef
    C#蓝牙开发之查找设备以及配对
    GridView获取隐藏列的值
    PDA(Windows Mobile)调用远程WebService
    VS2008使用宏记录来实现自动增加注释信息
    CS 系统框架二[部分内容更新]
    GridView里面嵌套RadioButton
    .Net 以报表的形式加载SAP里面的数据
    取GridView的PagerTemplate里面的控件ID
    《深入Ajax架构和最佳实践》读书笔记
  • 原文地址:https://www.cnblogs.com/jake-ge/p/7008643.html
Copyright © 2011-2022 走看看