0

私のURL文字列は

" https://MyCom.Produect.App.ResourcePath/ts?Customer_Account=A BC\, LLC,DEF\, LLC&Billing_Code=11,12&fromDateTime=2013-05-13&toDateTime=2013-06-13"

IE にコピーして実行すると、何らかのデータが返されます。ただし、C# で同じ文字列を使用すると、不正なリクエスト例外が発生します。これが私のc#コードです。何かが欠けているに違いないと思います。ありがとう

    public void GetDataAsyn(string m_strUrl)
    {
        var username = m_strEmail;
        var password = m_strPassword;

        var uri = new Uri(m_strUrl);            

        var credentialCache = new CredentialCache();
        credentialCache.Add(uri, "Basic", new NetworkCredential(username, password));
        var httpRequest = (HttpWebRequest)WebRequest.Create(uri);
        httpRequest.Method = "GET";
        httpRequest.ContentType = "application/json";
        httpRequest.UseDefaultCredentials = true;
        httpRequest.Accept = Constants.CONTENT_TYPE_TEXT_CSV;
        httpRequest.UserAgent = Helper.GetUserAgent();
        Helper.SetProxyIfNeeded(httpRequest, uri);
        httpRequest.Headers.Add("Authorization", Helper.GetAuthHeader(username, password));

        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
        httpRequest.BeginGetResponse(GetResponseCallback, new object[] { httpRequest });
    }

    private void GetResponseCallback(IAsyncResult asyncResult)
    {
        try
        {
            var obj = (object[])asyncResult.AsyncState;
            var request = (HttpWebRequest)obj[0];
            var response = request.EndGetResponse(asyncResult);
            Stream responseStream = response.GetResponseStream();
            if (responseStream != null)
            {
                var streamReader = new StreamReader(responseStream);
                ReturnedData = streamReader.ReadToEnd();
            }

            ....do something with ReturnedData
        }
        catch (Exception ex)
        {
            Helper.LogError(ex);
        }
    }
4

1 に答える 1

1

URL をm_strUrl.

ほとんどの場合\、C# の文字はエスケープであるため、不適切な要求を受け取っています。

\このような問題を修正するには、このようにエスケープする必要があります\\

または、これを処理するよりクリーンな方法は、@記号を使用して文字列をリテラルにすることです。

提供した例の が URL の一部である場合\(エスケープ文字ではない)、以下はリテラル URL 文字列です。

    string m_strUrl =  @"https://MyCom.Produect.App.ResourcePath/ts?Customer_Account=A%20B%20C\,%20LLC,D%20E%20F\,%20LLC&Billing_Code=11,12&fromDateTime=2013-05-13&toDateTime=2013-06-13";

すでに文字列でコンマをエスケープしようとしている場合は、次の\ようになります。

    string m_strUrl = @"https://MyCom.Produect.App.ResourcePath/ts?Customer_Account=A%20B%20C,%20LLC,D%20E%20F,%20LLC&Billing_Code=11,12&fromDateTime=2013-05-13&toDateTime=2013-06-13";
于 2013-06-13T21:44:27.333 に答える