2017-02-24 38 views
0

我.NET的核心1.1開發Web應用程序,既有一個Web API和MVC應用程序。當我試圖在IIS上託管應用程序時調用Web API時,我遇到了一個問題。.NET的核心 - 從MVC應用程序中調用的Web API使用Windows身份驗證在IIS上的結果HttpRequestException 401(未授權)狀態代碼

  • 我在同一個IIS網站上都有MVC和API應用程序,並且都啓用了Windows身份驗證(使用NTLM /協商提供程序)。

  • 我已經在web.config forwardWindowsAuthToken =真。

  • 我可以直接打電話從郵差/ Web瀏覽器的API URL和接收JSON結果

  • 所有API調用都在HttpClient的正在作出的HttpClientHandler的構造有UseDefaultCredentials =真

  • 如果我在我的桌面上運行MVC應用程序(通過具有調試功能的Visual Studio進行IE瀏覽器)並將它指向IIS網站上的Web API,我會得到正確的JSON結果並且不會出現401錯誤。

  • 更改的MVC應用程序託管網址爲localhost,而不是完全合格的URL,對這個問題沒有影響

我認爲這是與ASP.NET核心不轉發正確來自我的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); 
     } 
    } 

回答

1

花了我太多時間來弄清楚這一點。如果你被困在一個情況下,你必須調用Intranet上的Web API形成一個MVC應用程序,他們是在同一地點(如http://my.websi.te/applicationhttp://my.websi.te/application/api),你會遇到401錯誤,這是因爲微軟已經內置回調循環在同一臺服務器上檢測。我通過遵循Microsoft知識庫中的第一種方法修復了我的問題located here

相關問題