Javascript 当用户不是';您没有授权进行查询吗?

Javascript 当用户不是';您没有授权进行查询吗?,javascript,asp.net-web-api,authorization,breeze,Javascript,Asp.net Web Api,Authorization,Breeze,我怎么知道一个用户没有被授权进行Breeze查询 我已将Authorize属性添加到我的Breeze控制器的查询中: [BreezeController] public class GamesController : ApiController { //... [HttpGet] [Authorize] public IQueryable<Game> Games() { // return query from EF }

我怎么知道一个用户没有被授权进行Breeze查询

我已将
Authorize
属性添加到我的Breeze控制器的查询中:

[BreezeController]
public class GamesController : ApiController
{
    //...
    [HttpGet]
    [Authorize]
    public IQueryable<Game> Games()
    {
        // return query from EF
    }
}
[BreezeController]
公共类游戏控制器:ApiController
{
//...
[HttpGet]
[授权]
公开易读游戏()
{
//从EF返回查询
}
}
当我用Breeze从javascript查询时,我得到了200的HttpResponse,里面是登录屏幕的HTML。我想知道用户何时未被授权,然后用javascript处理这个问题(并显示当时我想要的任何HTML)


我怎样才能做到这一点呢?

经过进一步调查,我相信这与微风无关。是ASP.NET(MVC)导致了这种行为。当用户未经授权时,它返回302重定向

解决这个问题的方法是,钩住这个行为并使ASP.NET返回401。但我们只希望在AJAX请求下执行此操作

详细信息在中,但归结为一个
IHttpModule
,它确实更改了响应的状态代码:

if (true.Equals(context.Items["RequestWasNotAuthorized"]) && request.IsAjaxRequest())
{
    response.StatusCode = 401;
    response.ClearContent();
}
和一个自定义属性,而不是ASP.NET的授权属性:

public class AjaxAwareAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.HttpContext.Items["RequestWasNotAuthorized"] = true;
        }
    }
}
然后,您只需要在客户端检查401的响应