wcf在post请求时,关于string类型参数传入中文的处理

Posted simplegis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wcf在post请求时,关于string类型参数传入中文的处理相关的知识,希望对你有一定的参考价值。

一、方法默认只有一个参数

(1)BodyStyle = WebMessageBodyStyle.Bare

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[Description("地址解析(多个地址以‘,‘间隔,解析结果以JSON格式返回)")]
string Parse(string address);

------------------------------------------------------------------------------------

c#代码在客户端调用时,使用以下语句:

//SufeiHttpHelper是一个第三方的http请求调用工具

SufeiHttpHelper helper = new SufeiHttpHelper();
var item = new HttpItem();
item.URL = "http://localhost:35401/parse";
item.ContentType = "application/json";
item.Method = "post";
item.PostEncoding = Encoding.GetEncoding("utf-8");
item.Postdata = ""天津大学"";

(2)BodyStyle = WebMessageBodyStyle.Wrapped

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
[Description("地址解析(多个地址以‘,‘间隔,解析结果以JSON格式返回)")]
string Parse(string address);

---------------------------------------------------------------------------------------

item.PostEncoding = Encoding.GetEncoding("utf-8");

item.Postdata = "{"address":"天津"}";             //包装成json格式,并且指定参数名称

总结:以上两个形式,在传入string参数为中文时,必须要包装成json,如果是数字或字母,在BodyStyle = WebMessageBodyStyle.Bare),可以直接传入,无需包装成json

 

一、方法有多个参数

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped)]
Stream HelloDataStr(String data1,string data2);

由于是多个参数,BodyStyle必须为 WebMessageBodyStyle.Wrapped,否则参数无法映射。

客户端调用:

item.PostEncoding = Encoding.GetEncoding("utf-8");

item.Postdata = {"data1":"hh","data2":"ss"}");

以上是关于wcf在post请求时,关于string类型参数传入中文的处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在测试 WCF 服务时将值传递给 List<string> 属性?

C# post 如何传多个值

get请求400错误,post请求405错误

Spring JdbcTemplate 查询绑定list参数

无法以 GET 类型的方法将字典作为参数传递给 WCF REST 服务

postman接口测试:添加信息