我的REST Web服务应该接收带有西里尔字母的GET编码请求。
例如:www.service / srv?param1 =%D1%E0%ED%EA%F2
我知道这是Windows-1251 ISO-8859-1,但作为我的网络服务功能中输入参数的值总是有类似问号的东西。我猜这个服务将字符串转换为UTF-8。
是否可以在Windows-1251代码页中重现GET请求?
有一个类似的主题:Cyrillic letters are incorrectly encoded in the C# Web Service 答案是使用utf-8编码。但我的情况是我无法更改Web服务请求。
网络服务说明:
[OperationContract]
[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = @"param?p1={p1}&p2={p2}&p3={p3}…")]
string MyFunction(string p1, string p2, string p3, …);
答案 0 :(得分:1)
我唯一可以提供的解决方案是:
PropertyInfo[] inf = WebOperationContext.Current.IncomingRequest.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
HttpRequestMessageProperty val = (HttpRequestMessageProperty)inf[0].GetValue(WebOperationContext.Current.IncomingRequest, null);
string paramString = HttpUtility.UrlDecode(val.QueryString, Encoding.GetEncoding(1251));
Uri address = new Uri("http://server.ru/services/service.svc/reg?" + paramString);
p1 = HttpUtility.ParseQueryString(address.Query).Get("p1");
p2 = HttpUtility.ParseQueryString(address.Query).Get("p2");
p3 = HttpUtility.ParseQueryString(address.Query).Get("p3");
...
我想知道为什么全球化标签在这种情况下不起作用。 虽然这段代码有效,但我真的很感激有关此问题的任何进一步建议。
答案 1 :(得分:0)
您可以尝试更改您的web.config:
<system.web>
<globalization requestEncoding="iso-8859-1" ... other stuff... />
</system.web>
请注意,它可能会对您的应用产生一些其他副作用。