我已經構建了一個ASP.NET MVC 4網站,它具有ASP.NET Web Api,它將通過IIS中的Windows身份驗證進行保護。在Visual Studio中工作正常; HttpClient的調用正在工作,並始終返回數據以及狀態碼200.但是,當我發佈到IIS時,這就是出錯的地方;當試圖打電話給api時,我總是得到一個401未經授權的這些設置:HttpClient通過Windows憑據
身份驗證:僅Windows身份驗證 授權:只允許一個用戶 - 我。
但是,當我將授權更改爲允許所有,它工作正常,但這不是我想要的行爲。
我試着直接從瀏覽器調用API,授權只設置爲我的帳戶......並且它可以正常工作,就像一個很好的小Api;除非我以其他用戶身份登錄,否則不會有未授權的錯誤
所以我想這導致我得出結論說,網站如何與API進行通信有些問題。這裏是我的代碼爲:
public ActionResult Index()
{
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
using (HttpClient client = new HttpClient(handler))
{
var clientResult = client.GetAsync(
string.Format(@"{0}{1}",ConfigurationManager.AppSettings["WebApiBaseUri"].ToString(), "products")
).Result;
clientResult.EnsureSuccessStatusCode();
//if (clientResult.StatusCode != HttpStatusCode.OK)
//{
// ViewBag.Error = clientResult.StatusCode;
// ViewBag.User = userName;
// ViewBag.Message = clientResult.Content.ReadAsStringAsync().Result;
// return View();
//}
var receivedData = clientResult.Content.ReadAsStringAsync().Result;
List<ProductModel> data = JsonConvert.DeserializeObject<List<ProductModel>>(receivedData);
return View(data);
}
}
,這裏是在API端的代碼:
public IQueryable<Product> Get()
{
_context = new InventoryContext();
return _context.Products.AsQueryable();
}
任何人都知道我做錯了嗎?