类型为“ application / x-www-form-urlencoded”的C#HttpWebRequest-如何在内容主体中发送\'&\'字符?

| 我正在用C#编写一个连接API的小型应用程序。 我连接到一个API,该API的方法需要一个长字符串,即calendar(ics)文件的内容。 我正在这样做:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = \"POST\";
request.AllowAutoRedirect = false;
request.CookieContainer = my_cookie_container;
request.Accept = \"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\";
request.ContentType = \"application/x-www-form-urlencoded\";

string iCalStr = GetCalendarAsString();

string strNew = \"&uploadfile=true&file=\" + iCalStr;

using (StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII))
 {
     stOut.Write(strNew);
     stOut.Close();
 }
在我在日历中添加一些特定的HTML之前,这似乎工作得很好。 如果我在日历中(或类似地方)的某个地方有一个\'&nbsp \',则服务器只会获取所有数据到\'&\'点,因此我假设\'&\'使它看起来像像这个点之后的任何东西都属于新参数? 我怎样才能解决这个问题?     
已邀请:
由于您的内容类型为
application/x-www-form-urlencoded
,因此您需要对POST正文进行编码,尤其是当它包含诸如
&
之类的具有特殊含义的字符时。 在将字符串写入请求流之前,请尝试通过HttpUtility.UrlEncode传递字符串。 这里有几个链接供参考。 http://en.wikipedia.org/wiki/Percent-encoding http://aspnetresources.com/blog/encoding_forms     
首先安装“ Microsoft ASP.NET Web API客户端” nuget包:
  PM > Install-Package Microsoft.AspNet.WebApi.Client
然后使用以下功能发布数据:
public static async Task<TResult> PostFormUrlEncoded<TResult>(string url, IEnumerable<KeyValuePair<string, string>> postData)
{
    using (var httpClient = new HttpClient())
    {
        using (var content = new FormUrlEncodedContent(postData))
        {
            content.Headers.Clear();
            content.Headers.Add(\"Content-Type\", \"application/x-www-form-urlencoded\");

            HttpResponseMessage response = await httpClient.PostAsync(url, content);

            return await response.Content.ReadAsAsync<TResult>();
        }
    }
}
这是如何使用它:
TokenResponse tokenResponse = 
    await PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData);
要么
TokenResponse tokenResponse = 
    (Task.Run(async () 
        => await PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData)))
        .Result
或(不推荐)
TokenResponse tokenResponse = 
    PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData).Result;
    
只要服务器允许将ampresand字符过帐(并非所有操作都是不安全的),您要做的就是URL编码字符。如果是&符号,则应将字符替换为
%26
。 .NET为您提供了一种编码整个字符串的好方法:
string strNew = \"&uploadfile=true&file=\" + HttpUtility.UrlEncode(iCalStr);
    

要回复问题请先登录注册