我有一个大文件,我必须发送到一个web api客户端…数据是多部分。 问题是,如果文件是通过http web请求发送的,那么它会在webapi上快速上传。 对于这个请求,文件内容直接写在请求stream上。 就像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢。 我在Httpclient post async中使用multipartformdatacontent。 那么,对于大文件,我们是否只能使用Web请求? 还是有任何设置上的Httpclient,使上传更快?
我可能在这里丢失了一些明显的东西 我正在使用HttpClient抛出包含StatusCode在消息string中的HttpRequestException 。 我怎样才能访问StatusCode ? 编辑 :更多信息,我急于写这个问题。 我正在使用HttpClient来访问我的WebApi项目中的另一个API。 是的,我知道我为什么要调用EnsureSuccessStatusCode() 。 我想传播下游的一些错误,如404和403。 我只想要使用自定义的ExceptionFilterAttribute一致地将HttpRequestException转换为HttpResponseException 。 不幸的是,除了消息之外, HttpRequestException不会携带任何额外的信息。 我希望能够以raw(int或enum)forms发现StatusCode 。 看起来我可以: 使用该信息切换状态码(bleh) 或创build我的版本EnsureSuccessStatusCode并抛出实际可用的exception。
我一直在试图找出如何读取httpclient调用的内容,我似乎无法得到它。 我得到的响应状态是200,但我无法弄清楚如何得到实际的Json被返回,这是我所需要的! 以下是我的代码: async Task<string> GetResponseString(string text) { var httpClient = new HttpClient(); var parameters = new Dictionary<string, string>(); parameters["text"] = text; Task<HttpResponseMessage> response = httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters)); return await response.Result.Content.ReadAsStringAsync(); } 我只是从一个方法调用它: Task<string> result = GetResponseString(text); 这就是我得到的 response Id = 89, Status = RanToCompletion, Method = "{null}", Result = "StatusCode: 200, ReasonPhrase: 'OK', Version: […]
这发生在针对Google云消息传递进行编码的情况下,但适用于其他地方。 考虑以下: var http = new HttpClient(); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("key=XXX"); 和 var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "key=XXX"); 两者都生成一个FormatException: System.FormatException:值key = XXX'的格式无效。 解决方法是删除等号。 挖掘reflection器显示有一些validation和parsing代码,当添加一个新的头部值时运行。 为什么这一切都是必要的? 难道这个客户不应该离开我们的方式吗? 你如何逃避等号,以便添加此值成功?
我试图反序列化从http://api.usa.gov/jobs/search.json?query=nursing+jobs使用.NET 4.0任务模式返回的JSON。 它返回这个JSON('加载JSON数据'@ http://jsonviewer.stack.hu/ )。 [ { "id": "usajobs:353400300", "position_title": "Nurse", "organization_name": "Indian Health Service", "rate_interval_code": "PA", "minimum": 42492, "maximum": 61171, "start_date": "2013-10-01", "end_date": "2014-09-30", "locations": [ "Gallup, NM" ], "url": "https://www.usajobs.gov/GetJob/ViewDetails/353400300" }, { "id": "usajobs:359509200", "position_title": "Nurse", "organization_name": "Indian Health Service", "rate_interval_code": "PA", "minimum": 42913, "maximum": 61775, "start_date": "2014-01-16", "end_date": "2014-12-31", "locations": [ "Gallup, […]
我正在编写一个应用程序,它使用ASP.NET Web API代理一些HTTP请求,我正在努力识别间歇性错误的来源。 这似乎是一个竞争条件…但我不完全确定。 在我详细讨论之前,这里是应用程序的一般通信stream程: 客户端向代理1发出HTTP请求。 代理1将HTTP请求的内容中继到代理2 代理2将HTTP请求的内容中继到目标Web应用程序 目标Web应用程序响应HTTP请求,并将响应stream式传输(分块传输)到代理2 代理2将响应返回到代理1 , 代理1又响应原始呼叫客户端 。 代理应用程序使用.NET 4.5编写在ASP.NET Web API RTM中。 执行继电器的代码如下所示: //Controller entry point. public HttpResponseMessage Post() { using (var client = new HttpClient()) { var request = BuildRelayHttpRequest(this.Request); //HttpCompletionOption.ResponseHeadersRead – so that I can start streaming the response as soon //As it begins to filter in. […]
我有一个服务使用Microsoft.Net.Http来检索一些Json数据。 大! 当然,我不希望我的unit testing打到实际的服务器(否则,这是一个集成testing)。 这是我的服务ctor(它使用dependency injection…) public Foo(string name, HttpClient httpClient = null) { … } 我不知道我怎么可以嘲笑…说… Moq或FakeItEasy 。 我想确保当我的服务调用GetAsync或PostAsync ..然后我可以伪造这些调用。 任何build议我怎么能做到这一点? 我是 – 希望 – 我不需要做我自己的包装..因为这是废话:(微软不能做出这个疏忽,对吧? (是的,制作包装纸很容易..我之前做过这些,但这是重点!)
我正在Win8 CP上的基于xaml的C# metro应用程序中调用; 这个调用只是命中一个Web服务并返回JSON数据。 HttpMessageHandler handler = new HttpClientHandler(); HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = new Uri("http://192.168.1.101/api/"); var result = await httpClient.GetStreamAsync("weeklyplan"); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WeeklyPlanData[])); return (WeeklyPlanData[])ser.ReadObject(result); 它挂在await但http调用实际上几乎立即返回(通过小提琴确认); 就好像await被忽略了,只是挂在那里。 在您询问之前 – 是 – 专用networkingfunction打开。 任何想法,为什么这会挂?
当有一个或两个任务,但是当我们有多个任务列出的时候会抛出一个错误“一个任务被取消”。 List<Task> allTasks = new List<Task>(); allTasks.Add(….); allTasks.Add(….); Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken); private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token) { HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url); HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(Constants.TimeOut); if (data != null) { byte[] byteArray = Encoding.ASCII.GetBytes(Helper.ToJSON(data)); MemoryStream memoryStream = new MemoryStream(byteArray); httpRequestMessage.Content = […]
我有下面的代码,成功的工作。 我无法弄清楚如何从响应中获取cookie。 我的目标是,我希望能够在请求中设置cookie,并将cookie从响应中取出。 思考? private async Task<string> Login(string username, string password) { try { string url = "http://app.agelessemail.com/account/login/"; Uri address = new Uri(url); var postData = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("username", username), new KeyValuePair<string, string>("password ", password) }; HttpContent content = new FormUrlEncodedContent(postData); var cookieJar = new CookieContainer(); var handler = new HttpClientHandler […]