我在同一个项目上有一个Web Api和Mvc 5。 Web Api受到承载令牌的保护(但我注释了SuppressDefaultHostAuthentication行,因此当我使用cookie mvc进行身份验证时,我可以从浏览器访问api)
现在我试图在不发送令牌的情况下从mvc控制器访问api,是否可以关闭SuppressDefaultHostAuthentication?
尝试没有成功(401错误):
HttpClientHandler handler = new HttpClientHandler()
{
PreAuthenticate = true,
UseDefaultCredentials = true
};
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("http://localhost:11374/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("api/MyApi").Result;
if (response.IsSuccessStatusCode)
{ }
}
如果不可能,那么处理这个问题的最佳方法是什么?
答案 0 :(得分:4)
WebApi遵循REST,除其他外,它决定请求是无状态的。这意味着使用WebApi或任何与REST兼容的API,没有任何概念,例如cookie,会话等。对API的每个请求都必须包含服务请求所需的所有信息。因此,如果您的端点需要身份验证,则必须对访问它的请求进行身份验证。期。如果您通过承载令牌进行身份验证,那么必须传递持有者令牌。
答案 1 :(得分:2)
由于WebAPI和MVC应用程序位于同一个项目中,因此您不需要通过HTTP并发出请求以访问每个方法 - 它们是邻居:)
您可以将WebAPI视为普通类,并在MVC控制器中实例化它。然后,您可以像处理应用程序中的任何其他对象一样调用实例上的方法。
但是,如果您通过HTTP利用请求来访问它,则无法避免WebAPI设计的令牌和/或其他安全机制。