1

キリル文字を含むGETエンコードされたリクエストを受信する必要があるRESTWebサービスがあります。

例:www.service / srv?param1 =%D1%E0%ED%EA%F2

これがWindows-1251ISO-8859-1であることは知っていますが、Webサービス関数の入力パラメーターの値として、常に疑問符のようなものがあります。私はそのサービスが文字列をUTF-8に変換すると思います。

Windows-1251コードページでGETリクエストを受信することは可能ですか?

同様のスレッドがありました。キリル文字がC#Webサービスで誤ってエンコードされている 答えは、utf-8エンコードを使用することでした。しかし、私の場合、リクエストをWebサービスに変更することはできません。

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, …);
4

2 に答える 2

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");
                ...

この場合、なぜグローバリゼーションタグが機能しないのか疑問に思います。このコードは機能しますが、この問題に関するさらなる提案に本当に感謝しています。

于 2012-12-27T14:46:49.963 に答える
0

次のようにweb.configを変更してみてください。

<system.web> 
    <globalization requestEncoding="iso-8859-1" ... other stuff... /> 
</system.web>

アプリに他の副作用が発生する可能性があることに注意してください。

于 2012-12-27T10:44:39.950 に答える