Javascript 当用户不是';您没有授权进行查询吗?
我怎么知道一个用户没有被授权进行Breeze查询 我已将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 }
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的响应