我正在加速.NET 4.5中的Asp.Net Identity。我设置了test app注册,登录并尝试拨打需要“管理员”声明的Api控制器:
[Authorize(Roles="Admin")]
public class WorkController : ApiController
当提出的请求没有“Admin”声明时,Web Api仍然会返回200-OK,但JSON为:{Message:"Authorization has been denied for this request."}
这对我来说有点奇怪,因为这并不代表成功的要求。我期待401错误。我无法找到有关如何自定义响应的信息,或返回正确的状态代码....我想我应该问401是否适合这个,或者200是正确的状态代码使用,我应该只是处理它?</ p>
编辑:由于某种原因,它现在返回401.现在我不明白为什么如果它被拒绝我之前收到JSON消息?
答案 0 :(得分:2)
我明白了。当指定了OwinStartup类的LoginPath时,我收到了JSON消息。
答案 1 :(得分:1)
上面提到的article是正确的,但我认为它并不涵盖第三方应用程序调用API而不是ajax请求的情况(测试查询[&# 34; X-Requested-With&#34;]等。
这是我的偏好:
在Startup.Configuration()或Startup.ConfigureAuth()中:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/LogOn"),
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsApiRequest(ctx.Request))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}
});
private bool IsApiRequest(IOwinRequest request)
{
return request.Uri.AbsolutePath.StartsWith("/api");
}