2

WEB簡易安静サービスをやってみました。この記事に基づく私のコード: http://www.progware.org/Blog/post/A-simple-REST-service-in-C.aspx 少し変更したので、私のサービスはいくつかのパラメーターを取得できます。ここに私の変更があります:

 public string GetClientNameById(string LS, string Owner, string info)
{
 .....
 return System.IO.File.ReadAllText(XMLFileName, Encoding.GetEncoding(1251));
}
[ServiceContract(Name = "RESTServices")]
    public interface IRESTServices
    {
        [OperationContract]
        [WebGet(UriTemplate = Routing.GetEPDRoute, BodyStyle = WebMessageBodyStyle.Bare)]
        string GetClientNameById(string Id,string LS,string tmp);
    }
public static class Routing
    {
        public const string GetEPDRoute = "/EPD/{id}+{LS}+{tmp}";
    }

英語の記号では問題なく動作しますが、キリル記号を使用する必要があります。URL にキリル文字を使用すると、404 エラーが返されます。パーセントエンコーディングを使用しようとしましたが、結果は同じです これが私のクライアントコードです:

string url = "http://localhost:4385/Service.svc/EPD/995118466+" + System.Uri.EscapeDataString("Аксенова") + "+434";
            WebRequest req = WebRequest.Create(url);
            using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(resp.GetResponseStream());
                label1.Text = reader.ReadToEnd();
            } 

これを修正する方法はありますか?

更新:解決策を見つけました-英語以外の記号を数値コードに置き換えただけですが、よりエレガントな解決策を見つけたいです

4

1 に答える 1

0
<globalization
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      responseHeaderEncoding="utf-8"
      fileEncoding="utf-8"
      resourceProviderFactoryType=""
      enableBestFitResponseEncoding="true"/>

web.configグローバリゼーションタグにtheaseパラメータを追加します

次に、このようなものを使用します

//UTF-8
HttpUtility.UrlDecode(parameter, System.Text.Encoding.UTF8)
//UTF-16
HttpUtility.UrlDecode(parameter, System.Text.Encoding.Unicode)
//UTF-32
HttpUtility.UrlDecode(parameter, System.Text.Encoding.UTF32)

それが役に立てば幸い

于 2012-11-09T06:33:05.350 に答える