我在 dotnet 核心中遇到了一些關(guān)于 CORS/HttpClient 的問(wèn)題。首先,我的應(yīng)用程序的結(jié)構(gòu)如下:Webapp -> Microservice-Gateway -> multiple Microservices如果我從我的 Web 應(yīng)用程序進(jìn)行 Ajax 調(diào)用$.ajax({ url: "https://[actual gateway Url]/customer/" + customerId, type: "GET", timeout: 60000, crossDomain: true, dataType: "json", success: data => { //... } });到網(wǎng)關(guān)服務(wù)器,我有時(shí)會(huì)收到以下錯(cuò)誤消息:請(qǐng)求的資源上不存在“Access-Control-Allow-Origin”標(biāo)頭。因此,不允許訪問(wèn)Origin ' http://localhost:50595 '。響應(yīng)的 HTTP 狀態(tài)代碼為 500。但是在內(nèi)部,如果我調(diào)試,我的網(wǎng)關(guān)會(huì)拋出此錯(cuò)誤:System.Net.Http.HttpRequestException:發(fā)送請(qǐng)求時(shí)出錯(cuò)。---> System.Net.Http.WinHttpException: 操作超時(shí)我試圖通過(guò)在網(wǎng)關(guān)和每個(gè)微服務(wù)中添加以下代碼來(lái)解決第一個(gè)錯(cuò)誤: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")]到每個(gè)控制器。我試圖通過(guò)在網(wǎng)關(guān)中創(chuàng)建一個(gè) HttpClient 作為單例并修改以下屬性來(lái)解決的第二個(gè)問(wèn)題: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);我的網(wǎng)關(guān)發(fā)送這樣的 HTTP 請(qǐng)求:[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);}正如我所說(shuō),有時(shí)它有效,有時(shí)則不起作用。也許你可以給我一些想法我的錯(cuò)誤是什么。提前致謝!
3 回答

喵喵時(shí)光機(jī)
TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
謝謝你讓我走向正確的方向。我想我找到了解決方法/修復(fù)。我必須在我的網(wǎng)關(guān)中設(shè)置以下屬性:
ServicePointManager.DefaultConnectionLimit = int.MaxValue;
- 3 回答
- 0 關(guān)注
- 442 瀏覽
添加回答
舉報(bào)
0/150
提交
取消