我在 dotnet 核心中遇到了一些关于 CORS/HttpClient 的问题。首先,我的应用程序的结构如下:Webapp -> Microservice-Gateway -> multiple Microservices如果我从我的 Web 应用程序进行 Ajax 调用$.ajax({ url: "https://[actual gateway Url]/customer/" + customerId, type: "GET", timeout: 60000, crossDomain: true, dataType: "json", success: data => { //... } });到网关服务器,我有时会收到以下错误消息:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost:50595 '。响应的 HTTP 状态代码为 500。但是在内部,如果我调试,我的网关会抛出此错误:System.Net.Http.HttpRequestException:发送请求时出错。---> System.Net.Http.WinHttpException: 操作超时我试图通过在网关和每个微服务中添加以下代码来解决第一个错误:public void ConfigureServices(IServiceCollection services) { var corsBuilder = new CorsPolicyBuilder(); corsBuilder.AllowAnyHeader(); corsBuilder.AllowAnyMethod(); corsBuilder.AllowAnyOrigin(); corsBuilder.AllowCredentials(); services.AddCors(options => { options.AddPolicy("SiteCorsPolicy", corsBuilder.Build()); }); //.. } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCors("SiteCorsPolicy"); //.. }为了确定我还添加了[EnableCors("SiteCorsPolicy")]到每个控制器。我试图通过在网关中创建一个 HttpClient 作为单例并修改以下属性来解决的第二个问题:var client = new HttpClient();client.Timeout = new TimeSpan(0, 10, 0);client.DefaultRequestHeaders.Accept.Clear();client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));services.AddSingleton(client);我的网关发送这样的 HTTP 请求:[HttpGet("{id}")]public async Task<JsonResult> GetById(int id) { var response = await _client.GetAsync(new Uri(ServiceUrls.Customer + $"{id}")); if (!response.IsSuccessStatusCode) return new JsonResult(BadRequest($"{(int)response.StatusCode}: {response.ReasonPhrase}")); var customer = JsonConvert.DeserializeObject<CustomerViewModel>(await response.Content.ReadAsStringAsync()); return new JsonResult(customer);}正如我所说,有时它有效,有时则不起作用。也许你可以给我一些想法我的错误是什么。提前致谢!
3 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
谢谢你让我走向正确的方向。我想我找到了解决方法/修复。我必须在我的网关中设置以下属性:
ServicePointManager.DefaultConnectionLimit = int.MaxValue;
- 3 回答
- 0 关注
- 403 浏览
添加回答
举报
0/150
提交
取消