.Net C# 后台通过POST方式传递参数的两种方式

介绍

最近在学习调用webApi接口通过post方式传递实体参数时,发现接口那里接受不到数据,查找资料后顺利解决,顺便做下学习笔记。

一、json格式发送

首先将实体序列化为json格式的字符串,然后发送,示例代码 如下:

    Students student = new Students("1001","张三",20,"男");
    string json = JsonConvert.SerializeObject(student);
    string url = "http://localhost:34626/api/values";
    string result = WebHelper.HttpWebRequest(url, json, Encoding.GetEncoding("utf-8"));

其中,HttpWebRequest方法示例代码如下:

    public static string HttpWebRequest(string url, string parameters, Encoding encoding,int timeout = 120000)
    {
        var request = (HttpWebRequest)WebRequest.Create(url);  
        request.Timeout = timeout;
        request.CookieContainer = null;           
        byte[] postData = encoding.GetBytes(parameters);    
        request.Method = "POST";                            
        request.ContentType = "application/json";
        request.ContentLength = postData.Length;            
        using (Stream stream = request.GetRequestStream())  
        {
            stream.Write(postData, 0, postData.Length);
        }            
        var response = (HttpWebResponse)request.GetResponse();  
        string result;
        using (Stream stream = response.GetResponseStream())
        {
            if (stream == null)
                return string.Empty;
            using (var reader = new StreamReader(stream, encoding))
            {
                result = reader.ReadToEnd();
            }
        }
        return result;
    }

Post方法如下:

    //POST api/values
    public string Post(dynamic value)
    {
        return "value";
    }

接收到Json字符串之后再反序列化即可。Json反序列化

结果如下图:
.Net C# 后台通过POST方式传递参数的两种方式_第1张图片

二、key/value形式发送

首先将实体转换为Dictionary类型,然后构造字符串发送,接口用实体接收,示例代码 如下:

    //将实体转换为Dictionary
    var dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(JsonConvert.SerializeObject(student));
    StringBuilder builder = new StringBuilder();
    foreach (var item in dic)
    {
        builder.AppendFormat("{0}={1}&", item.Key, item.Value);
    }
    string url = "http://localhost:34626/api/values";
    string result = WebHelper.HttpWebRequest(url, builder.ToString(), Encoding.GetEncoding("utf-8"));

采用这种方式发送需要对HttpWebRequest方法修改一行代码,如下:

    //修改如下代码
    request.ContentType = "application/x-www-form-urlencoded";

Post接口示例如下:

    //POST api/values
    public string Post(Students value)
    {
        return "value";
    }

结果如下图:
.Net C# 后台通过POST方式传递参数的两种方式_第2张图片
虽然两种方式都能传递,但我还是比较喜欢序列化为Json格式之后发送,第二种方式对付简单的实体时比较好用,但是复杂的就不太好用了。

ok
到此结束。

参考链接:
[https://www.cnblogs.com/landeanfen/p/5337072.html#_label1_1]

你可能感兴趣的:(.Net C# 后台通过POST方式传递参数的两种方式)