Tag: dotnet httpclient

HttpClient身份validation标头未被发送

我正在尝试将HttpClient用于需要基本HTTP身份validation的第三方服务。 我正在使用AuthenticationHeaderValue 。 这是我到目前为止所提出的: HttpRequestMessage request = new HttpRequestMessage( new RequestType(“third-party-vendor-action”), MediaTypeHeaderValue.Parse(“application/xml”)); request.Headers.Authorization = new AuthenticationHeaderValue( “Basic”, Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes( string.Format(“{0}:{1}”, “username”, “password”)))); var task = client.PostAsync(Uri, request.Content); ResponseType response = task.ContinueWith( t => { return t.Result.Content.ReadAsAsync(); }).Unwrap().Result; 看起来POST动作工作正常,但我没有收到我期望的数据。 通过一些反复试验,并最终使用Fiddler来嗅探原始流量,我发现授权标头没有被发送。 我已经看过了 ,但我认为我已经将身份validation方案指定为AuthenticationHeaderValue构造函数的一部分。 有没有我错过的东西?

使用Web API Action中的HttpClient调用外部HTTP服务

我在.Net Framework 4.5上运行的ASP.Net MVC 4 Web Api项目中使用HttpClient调用外部服务 示例代码如下(忽略返回值,因为这是测试调用外部服务的示例代码): public class ValuesController : ApiController { static string _address = “http://api.worldbank.org/countries?format=json”; private string result; // GET api/values public IEnumerable Get() { GetResponse(); return new string[] { result, “value2” }; } private async void GetResponse() { var client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(_address); response.EnsureSuccessStatusCode(); result […]

使用C#HttpClient登录网站并从另一个页面抓取信息

我正在尝试使用C#和Chrome Web Inspector登录http://www.morningstar.com并在页面http://financials.morningstar.com/income-statement/is.html?t=BTDPF&region上检索一些信息= usa&culture = en-US 。 我不太明白,必须使用什么心理过程来解释Web Inspector中的信息,以模拟登录并模拟保持会话并导航到下一页以收集信息。 有人可以解释或指向我的资源吗? 目前,我只有一些代码来获取主页和登录页面的内容: public class Morningstar { public async static void Ru4n() { var url = “http://www.morningstar.com/”; var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept”, “text/html,application/xhtml+xml,application/xml”); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept-Encoding”, “gzip, deflate”); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“User-Agent”, “Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0”); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept-Charset”, “ISO-8859-1”); var response = await httpClient.GetAsync(new Uri(url)); response.EnsureSuccessStatusCode(); using (var […]

使http客户端同步:等待响应

我有一些文件要上传,一些文件失败,因为post是异步的而不是同步的.. 我正在尝试将此调用作为同步调用.. 我想等待回应。 如何将此调用设置为同步? static async Task Upload(string key, string url, string sourceFile, string targetFormat) { using (HttpClientHandler handler = new HttpClientHandler { Credentials = new NetworkCredential(key, “”) }) using (HttpClient client = new HttpClient(handler)) { var request = new MultipartFormDataContent(); request.Add(new StringContent(targetFormat), “target_format”); request.Add(new StreamContent(File.OpenRead(sourceFile)), “source_file”, new FileInfo(sourceFile).Name); using (HttpResponseMessage response = await client.PostAsync(url, […]

HttpClient不返回Content-Type

我正在向HttpClient发送请求。 服务器返回两个我想要返回客户端的标头。 我像这样运行它: using (var client = new HttpClient()) { var response = await client.GetAsync(DownloadUri + $”?path={path}&fileName={fileName}”); // … } 但是在客户端我有10个头,而服务器发送12。这是我在调试器中获得的response.Headers.ToString() : Transfer-Encoding: chunked X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQWxleFxEb2N1bWVudHNcdGZzXFVDRktcdnNuXGRldlxMYW5pdC5VQ0ZLLkZpbGUuU2VydmVyXEZpbGUuc3ZjXERvd25sb2Fk?= Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Credentials: true Cache-Control: private Date: Mon, 06 Jun 2016 12:19:09 GMT Server: Microsoft-IIS/10.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET 这就是我使用外部Rest客户端获得的: 缺少Content-Type和Content-Disposition 。 我如何使用HttpClient获取它?

HttpClient调用Windows-Authenication ApiController方法…但没有WindowsIdentity出现

当api-controller使用windows-authentication时,我的api控制器是否有办法获得启动api控制器调用的帐户的IIdentity? 我的“castController.User.Identity”是(类型)WindowsIdentity。 但它是“空的”。 空,原样:IsAuthenticated = false,以及一个空的UserName。 它不是空的,它是“空的”。 我的“WebTier”是一个运行自定义AppPool的IIS应用程序,运行自定义AppPool的IIdentity类似于“mydomain \ myServiceAccount”。 我正在尝试将“castController.User.Identity.Name”值作为此服务帐户。 (我想这可能是任何能够使用有效的Windows帐户连接到我的WebApiTier的客户端,但我提到这个以防万一它可能会抛出一个奇怪的猴子扳手) 我的“WebTier”(Mvc Application)有这样的方法: 你会注意到我使用UseDefaultCredentials的两种方法。 (阿卡,我一直试图解决这个问题) private async Task ExecuteProxy(string url) { HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = true }; handler.PreAuthenticate = true; WebRequestHandler webRequestHandler = new WebRequestHandler(); webRequestHandler.UseDefaultCredentials = true; webRequestHandler.AllowPipelining = true; webRequestHandler.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired; webRequestHandler.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification; using (var client […]

发布和重定向FROM Web Api

警告: 这个问题不是关于如何发布到Web Api,是如何从Web Api发布。 场景: 我的问题与Darin Dimitrov的回答有关: 如何在ASPNET Web API中重定向 并且似乎是一个重复的: Response.Redirect,它将数据发布到ASP.NET中的另一个URL,但考虑到问题已经过时(2008),我正在寻找可能WebApi是最新的答案。 使用Visual Studio 2012 Web Api 2.1 我通过控制器中的POST方法获取应用程序中的数据(是一个web api)。 到现在为止还挺好。 现在我想将这些数据(带有一些更改)发布到接受我的数据的外部站点(这已经过validation并且可以正常工作)。 对于这个过程,我尝试了两种方法: 使用带有javascript的“onload”事件提交的基本表单创建一个字符串。 从( 将数据POST到ASP.NET中的另一个URL的Response.Redirect )。 这是有效的,这就是我使用它的方式,但也许可以用一些更好的方法来代替。 使用client.PostAsync 。 我也可以使用它,但我不想显示对用户的响应,我想重定向他。 也许这可以适应重定向? 题: 如何在不使用“onload”变通方法的情况下重定向发送Post变量,或者在不等待响应的情况下调整“HttpClient”以进行重定向后? 考虑:我不发布任何代码,因为我的两个选项的实现已经很容易,我没有任何问题。

HttpClient PostAsJsonAsync与Newtonsoft.Json不兼容

我刚刚在winforms应用程序中找到的东西 我的应用程序对Web Api服务进行http调用,如下所示 HttpClient _client = new HttpClient(); _client.Timeout = new TimeSpan(0, 3, 0); _client.BaseAddress = new Uri(“http://Myserver/MyApp”); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); HttpResponseMessage response = _client.PostAsJsonAsync(“api/Addin”, newObject).Result; 没什么好看的,但只要你通过nuget安装Newtonsoft.Json(V6.0.3) 突然我在HttpResponseMessage代码行上遇到stackOverflow错误。 删除Newtonsoft,问题解决了。 问题是我是使用库来序列化/反序列化我表单中其他地方的数据 我的解决方法是使用不同的库,我只使用System.Runtime.Serialization.Json; 但这仍然很奇怪,不是吗? 我还应该补充一点,这是dotnet v4.0(而不是4.5),我的应用程序是在MsWord中作为Add On运行的VSTO COM对象 我怀疑牛顿软件中可能存在一个错误

RestSharp忽略.NET Core上的系统代理(例如Fiddler)

我想用Fiddler检查http流量,但没有捕获任何http流量,我的测试代码: private static void ByRestSharp() { var restClient = new RestClient(“https://jsonplaceholder.typicode.com”); var request = new RestRequest(“posts”, Method.GET); var response = restClient.Get<List>(request); Console.WriteLine(“{0} posts return by RestSharp.”, response.Data.Count); } 但是在我改为使用HttpClient后,Fiddler可以捕获http流量,示例代码: private static void ByHttpClient() { var httpClient = new HttpClient(); using (var req = new HttpRequestMessage(HttpMethod.Get, “https://jsonplaceholder.typicode.com/posts”)) using (var resp = httpClient.SendAsync(req).Result) { var json = […]

在.NET中动态更改HttpClient.Timeout

我需要在发出请求后更改HttpClient.Timeout属性。 当我尝试时,我得到一个例外: 此实例已启动一个或多个请求。 只能在发送第一个请求之前修改属性。 有什么方法可以避免这种情况吗?