C#HttpWebRequest类型为“application / x-www-form-urlencoded” – 如何在内容体中发送’&’字符?
我正在用C#编写一个小型的API连接应用程序。
我连接到一个API,它有一个采用长字符串的方法,即日历(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,然后再将其写入请求流。
这里有几个链接供参考。
首先安装“ Microsoft ASP.NET Web API客户端 ”nuget包:
PM > Install-Package Microsoft.AspNet.WebApi.Client
然后使用以下函数发布您的数据:
public static async Task PostFormUrlEncoded (string url, IEnumerable> 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 (); } } }
这是如何使用它:
TokenResponse tokenResponse = await PostFormUrlEncoded(OAuth2Url, OAuth2PostData);
要么
TokenResponse tokenResponse = (Task.Run(async () => await PostFormUrlEncoded(OAuth2Url, OAuth2PostData))) .Result
或(不推荐)
TokenResponse tokenResponse = PostFormUrlEncoded(OAuth2Url, OAuth2PostData).Result;
只要服务器允许ampresand字符被POST(不是所有的都可以,因为它可能是不安全的),你应该做的就是URL编码字符。 对于放大器,您应该用%26
替换该字符。
.NET为您提供了一种很好的编码整个字符串的方法:
上述就是C#学习教程:C#HttpWebRequest类型为“application / x-www-form-urlencoded” – 如何在内容体中发送’&’字符?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
string strNew = "&uploadfile=true&file=" + HttpUtility.UrlEncode(iCalStr);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/991680.html