Tag: httpclient

HttpClient可以抛出哪些exception?

我在xamarin表单项目中使用HttpClient 该类已记录在案,但我找不到任何有关其方法可能引发exception的文档。 例如, GetAsync方法没有关于可能的exception的任何文档。 但我认为它会抛出,例如服务器无法访问时。 这个类可能会抛出一些exception列表吗?

c#httpclient PostAsJson发送GET请求而不是POST

我正在使用HttpClient发布post请求。 我不回来405方法。 在fiddler中捕获跟踪时,它会以GET而不是POST的forms出现! using (var client = new HttpClient()) { var url = AppSettingsUtil.GetString(“url”); var response = client.PostAsJsonAsync(url, transaction).Result; } 我知道异步/等待问题。 这是一个简化的示例来说明问题。 是否有某种web.config或machine.config设置可能会影响这个? 其他请求(通过RestSharp发送)正确发送post 这是小提琴手捕获的内容。 在fiddler中重新运行跟踪也会返回405(正如预期的那样)。 手动将其切换到POST并从fiddler运行。 另外,也许是因为该方法被切换到GET,在fiddler中没有捕获到的身体,我不得不手动粘贴在JSON中 GET /*URL*/ HTTP/1.1 Content-Type: application/json; charset=utf-8 Host: /*host*/ Connection: Keep-Alive

如何在WebAPI Web服务中获取可用方法列表?

我正在构建一个小型测试工具,它应该为用户提供Web服务列表(使用WebAPI构建)。 用户应该能够选择要测试的服务。 我正在使用 HttpClient client = new HttpClient(); client.BaseAddress = new Uri(“http://’localhost’:51062/”); // Add an Accept header for JSON format. client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(“application/json”)); 我正在寻找类似的东西 client.GetAllWebServices() 这将返回用户可以看到的方法列表。 意思是,他在控制器上开发并想要测试的方法。

使用.net(C#)System.Net.Cookie处理cookie值中的逗号

我正在创建一个访问网站并登录的客户端+自动执行某些任务,但是他们最近更新了他们的cookie(无论出于何种原因……)在其标识cookie中包含逗号。 例如,Cookie将具有与此类似的值: a,bcdefghijklmnop 问题是,根据msdn,你不能在cookie的值内使用逗号或句点。 我正在寻找的方法是绕过这个限制,某种方式使.net的Cookie与逗号的工作很好。 我发现服务器确实向客户端发送了一个’SET-COOKIE’标题,我猜这是正在解析的内容,但这似乎也显然给commans和分号带来了特殊的意义(因此限制了.NET内部的类)。 但那么IE,Firefox等浏览器如何正确处理cookie(正如他们显然那样,因为网站在我测试过的任何浏览器中都能正常工作。)是否有办法强迫这个在.NET中的行为? 任何帮助将不胜感激,谢谢。 —编辑— 一些额外的信息: 我的代码看起来像这样: request = (HttpWebRequest)WebRequest.Create(URI); request.CookieContainer = Program.client.cookieJar; 其中cookieJar在Program.client中定义为: CookieContainer cookieJar = new CookieContainer(); 当我遍历并打印出CookieContainer中的所有Cookie时,我得到以下内容:( cookies,格式为:“name” – >“value”) “normal_cookie” -> “i am the value” “messedup_cookie” -> “a” “bcdefghijklmnop” -> “” // What I should get is this: “normal_cookie” -> “i am the value” “messedup_cookie” -> “a,bcdefghijklmnop” […]

如何从HttpResponseMessage获取特定的标头值

我正在进行HTTP呼叫。 我的响应在HttpResponseMessage对象的标题部分中包含会话代码X-BB-SESSION 。 如何获取特定的标头值? 我正在使用foreach语句迭代所有标头( MSDN链接 )。 但是编译器一直说不能这样做: foreach statement cannot operate on variables of type System.net.http.headers.cachecontrolheadervalue because ‘System.net.http.headers.cachecontrolheadervalue’ doesn’t contain a public definition for ‘GetEnumerator’ 这是我正在尝试的代码: //Connection code to BaasBox HttpResponseMessage response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { //get the headers HttpResponseHeaders responseHeadersCollection = response.Headers; foreach (var value in responseHeadersCollection.CacheControl) –> HERE { […]

使用HttpClient上传图片

我想使用HttpClient将文件上传到php脚本,以将其保存在Windows Phone 8.1应用程序的服务器上。 这是我从这篇文章得到的C#代码。 private async Task GetRawDataFromServer(byte[] data) { //Debug.WriteLine(“byte[] data length:” + Convert.ToBase64String(data).Length); var requestContent = new MultipartFormDataContent(); // here you can specify boundary if you need—^ var imageContent = new ByteArrayContent(data); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse(“image/jpeg”); requestContent.Add(imageContent, “image”, “image.jpg”); using (var client = new HttpClient()) { client.BaseAddress = new Uri(“http://sofzh.miximages.com/c%23/ return( $outputfile ); } […]

强制HttpClient使用Content-Type:text / xml

这让我疯了,我在任何地方设置ContentType标头,似乎无法让它停止发送text / plain。 在Fiddler中查看数据时,请求始终请求: POST http:/domain.com HTTP / 1.1 Content-Type:text / plain; 字符集= utf-8的 using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Post, “http://domain.com”); request.Content = new StringContent(Serialize(obj), Encoding.UTF8, “text/xml”); request.Content.Headers.Clear(); request.Content.Headers.ContentType = new MediaTypeHeaderValue(“text/xml”); request.Headers.Clear(); request.Headers.Add(“Content-Type”,”text/xml”); var response = await httpClient.SendAsync(request); return await response.Content.ReadAsStringAsync(); }

如何在使用HttpClient.GetAsync()时确定404响应状态

我试图确定HttpClient的GetAsync方法在使用C#和.NET 4.5的404错误的情况下返回的response 。 目前我只能说出错误已经发生而不是错误的状态,如404或超时。 目前我的代码我的代码如下所示: static void Main(string[] args) { dotest(“http://error.123”); Console.ReadLine(); } static async void dotest(string url) { HttpClient client = new HttpClient(); HttpResponseMessage response = new HttpResponseMessage(); try { response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { Console.WriteLine(response.StatusCode.ToString()); } else { // problems handling here string msg = response.IsSuccessStatusCode.ToString(); throw new Exception(msg); } } […]

如何使用HttpClient读取XML响应?

显然HttpClient是新推荐的HTTP请求方式,因此我尝试使用它向Delicious API发出请求,返回XML响应。 这是我得到的: internal class Program { private static void Main(string[] args) { var credentials = new NetworkCredential(“username”, “password”); var handler = new HttpClientHandler { Credentials = credentials}; var client = new HttpClient(handler); var suggest = new Uri(“https://api.del.icio.us/v1/posts/suggest”); var suggestions = client.GetAsync(suggest.AddQueryParams(“url”, “https://yahoo.com”)) .ContinueWith(t => t.Result.Content.ReadAsAsync()) .Unwrap() .Result; Console.ReadLine(); } } public class DeliciousSuggest { […]

根据请求修改请求标头C#HttpClient PCL

我目前正在使用System.Net.Http.HttpClient进行跨平台支持。 我读到,为每个请求实例化HttpClient对象并不是一个好习惯,并且应尽可能重用它。 现在我在为服务编写客户端库时遇到了问题。 某些API调用需要具有特定标头,有些必须不包含此特定标头。 似乎我只能操纵将随每个请求发送的“DefaultRequestHeaders”。 实际发出请求时是否有一个选项,例如“client.PostAsync()”来修改仅针对特定请求的标头? (信息:请求可以是multithreading的)。 提前致谢!