IISのWindows認証で保護されるASP.NETWebAPIを使用してASP.NETMVC4Webサイトを構築しました。Visual Studioでは、問題なく動作します。HttpClientの呼び出しは機能しており、常にステータスコード200とともにデータを返します。ただし、IISに公開すると、問題が発生します。APIを呼び出そうとすると、次の設定で常に401Unauthorizedが表示されます。
認証:Windows認証のみ認証:1人のユーザーのみを許可します-私。
ただし、[承認]を[すべて許可]に変更すると、正常に機能しますが、それは私が望む動作ではありません。
自分のアカウントにのみ認証を設定して、ブラウザからAPIを直接呼び出してみました...そしてそれは良い小さなApiのようにうまく機能します。別のユーザーとしてログオンしない限り、不正なエラーは発生しません。
したがって、これにより、Webサイトが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();
}
誰かが私が間違っていることを知っていますか?