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

      

  • 相关阅读:
    vscode配置c++以及美化插件
    自适应辛普森积分法
    [SDOI2014]数表
    [JSOI2009]等差数列
    MUI的踩坑笔记
    笔记:《吴恩达机器学习》——网易云课堂课程[绪论+单变量线性回归]
    CocoStuff—基于Deeplab训练数据的标定工具【五、训练成果分析】
    CocoStuff—基于Deeplab训练数据的标定工具【四、用该工具标定个人数据】
    CocoStuff—基于Deeplab训练数据的标定工具【三、标注工具的使用】
    CocoStuff—基于Deeplab训练数据的标定工具【二、用已提供的标注数据跑通项目】
  • 原文地址:https://www.cnblogs.com/jake-ge/p/7008643.html
Copyright © 2020-2023  润新知