我試圖讓委派工作使用WebClient(或HttpClient)調用webservice。我有一個帶有控制器和Web Api控制器的MVC4 Web應用程序。我在Intranet的遠程服務器上設置了應用程序,並且在本地計算機上運行同一應用程序,在兩臺計算機上使用IIS,並使用基本身份驗證。代表不能正常工作
的網絡API控制器很簡單,這是服務的代碼:
[Authorize(Users="domain\\username")]
[HttpPost]
[HttpGet]
public string GetSimulationTest()
{
return "WS successfully called";
}
此WS工作從我的瀏覽器或提琴手完全正常,本地和遠程。
在我家的控制器,我有以下方法:
public ActionResult TestOwnWS()
{
ContentResult res = null;
WindowsIdentity wi = (WindowsIdentity)User.Identity;
WindowsImpersonationContext ctx = null;
try
{
ctx = wi.Impersonate();
WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Headers.Add("Content-Type", "application/xml");
res = this.Content(wc.DownloadString("linktoWS"), "application/xml");
}
catch (Exception e)
{
Response.Write(e.Message);
Response.End();
}
finally
{
ctx.Undo();
}
return res;
}
這裏的問題:我上wc.DownloadString()調用401授權。如果我使用本地webservice而不是遠程webservice,它甚至不會工作。但是,如果我使用wc.Credentials = new NetworkCredentials(user,pass,domain);
手動設置wc.Credentials,它就可以工作。
我以前使用Windows身份驗證,但它仍然拒絕工作,所以我閱讀委派,顯然,它應該工作正常,如果兩臺計算機上的帳戶是相同的(他們是)與基本身份驗證,而Windows身份驗證是更挑剔。
爲什麼它拒絕使用默認憑據,我仍然得到委派錯誤?我已經閱讀了msdn文章,並且找不到我做錯了什麼。
我想出了一個解決方法(只要它是基本的身份驗證),即運行'wc.Headers.Add(「Authorization」,Request.Headers [「Authorization」]);',但我會愛如果有人有更好的方法來解決這個問題,因爲這個修正強制客戶端和目標站點都運行基本身份驗證。 – Tobberoth