gpt4 book ai didi

javascript - 当用户无权进行查询时,如何让 Breeze 返回 HttpResponse 401?

转载 作者:行者123 更新时间:2023-11-29 14:52:15 25 4
gpt4 key购买 nike

我怎么知道用户无权执行 Breeze 查询?

我已将 Authorize 属性添加到我的 Breeze Controller 的查询中:

[BreezeController]
public class GamesController : ApiController
{
//...
[HttpGet]
[Authorize]
public IQueryable<Game> Games()
{
// return query from EF
}
}

当我使用 Breeze 从 javascript 查询这个时,我得到一个 200 的 HttpResponse,里面是登录屏幕的 HTML。我想知道用户何时未获得授权,然后在 javascript 中处理它(并在那个时候显示我想要的任何 HTML)。

我怎样才能做到这一点?

最佳答案

经过进一步调查,我认为这与 Breeze 无关。负责此行为的是 ASP.NET (MVC)。当用户未获得授权时,它会返回 302 重定向。

解决此问题的方法是 Hook 行为并使 ASP.NET 返回 401。但我们只想在 AJAX 请求上执行此操作。

详情请见this blogpost , 但它归结为一个 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 的响应。

关于javascript - 当用户无权进行查询时,如何让 Breeze 返回 HttpResponse 401?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com