[英].NET Core - Calling Web API from MVC Application with Windows Authentication on IIS Results In HttpRequestException 401 (Unauthorized) Status Code
我正在使用Web API和MVC應用程序在.NET Core 1.1上開發Web應用程序。 當我嘗試將應用程序托管在IIS上時從應用程序內部調用Web API時遇到問題。
我在同一IIS網站上同時擁有MVC和API應用程序,並且都啟用了Windows身份驗證(使用NTLM /協商提供商)。
我在web.config中具有forwardWindowsAuthToken = true。
我可以直接從Postman / Web瀏覽器調用API URL並接收JSON結果
所有的API調用都是在HttpClient中進行的,其中HttpClientHandler的構造函數具有UseDefaultCredentials = true
如果我在桌面上運行MVC應用程序(通過帶有調試的Visual Studio通過IE運行),並使其指向IIS網站上的Web API,我將得到正確的JSON結果,並且沒有401錯誤。
將MVC應用程序上的托管URL更改為localhost而不是完全限定的URL不會對問題產生影響
我認為這與ASP.NET Core沒有將正確的憑據從我的MVC應用程序轉發到Web API有關。 我花了幾個小時試圖找到完全一樣的人,但是大多數解決方案和問題的變化都與此略有不同,針對這些問題提出的解決方案對我沒有任何幫助。
誰能闡明這個問題,或者指出我在做錯什么? 這是我對基本索引頁面進行的API調用的示例...
public async Task<IncidentWrapper> GetIndex(int limit, int offset)
{
using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
{
var response = await client.GetStringAsync("https://<some.server.name>/<appname>/api/v1/Incidents?limit=10&offset=0");
return JsonConvert.DeserializeObject<IncidentWrapper>(response);
}
}
花了我很長時間才弄清楚這一點。 如果您陷入困境,則必須通過MVC應用程序在Intranet上調用Web API,並且它們位於同一站點(例如, http://my.websi.te/application和http:// my。 websi.te / application / api ),您會遇到401錯誤,這是因為Microsoft在同一服務器上內置了回調循環檢測功能。 我通過按照位於此處的Microsoft知識庫中的第一種方法解決了問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.