gpt4 book ai didi

asp.net-mvc - 您如何处理对返回除 ViewResult 以外的结果的操作的授权?

转载 作者:行者123 更新时间:2023-12-04 14:07:35 24 4
gpt4 key购买 nike

我在我的 ASP.NET MVC Controller 上使用自定义授权过滤器,如果用户在特定操作上的授权失败,它会将用户重定向到登录屏幕以外的 url。

这对于返回 View 的操作没有问题,但我的许多操作返回其他结果类型,例如 PartialResult 或 JsonResult。

我当前的过滤器如下所示:

<AuthorizeWithRedirect(Roles:="ServerAccess", Controller:="Home", Action:="Unauthorised")>



这表明如果用户不在 ServerAccess 角色中,那么他们应该被重定向到/Home/Unauthorised/

我很好奇其他人是如何处理这个的?当您考虑仅由客户端脚本 AJAX 调用调用的操作数量时,这似乎特别成问题。/Home/Unauthorised/ Action 如何知道调用者是否打算接收 View 、局部 View 、json、内容等?

最佳答案

使用 Request.IsAjaxRequest(),例如:

public sealed class AjaxAuthorizeAttribute : AuthorizeAttribute
{
public AjaxAuthorizeAttribute() : base()
{
}

public override void OnAuthorization(AuthorizationContext filterContext)
{
// Extends the original Web.MVC.AuthorizeAttribute for Ajax calls.
// Basically if the request is not authorized and the request is an AJAX Request.
// then we simply set the stats Code to 403 and set an empty Result, in order to
// determine in Javascript if the AJAX call came back completed and valid.
base.OnAuthorization(filterContext);
if (filterContext.Result == null)
{
return;
}
else if (filterContext.Result.GetType() == typeof(HttpUnauthorizedResult)
&& filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new ContentResult();
filterContext.HttpContext.Response.StatusCode = 403;
}
}
}

注意 403,而不是 401,因为 ASP.NET 拦截 401 并将它们转换为 HTML 错误页面。 AJAX 调用期望收到什么并不重要;它仍然可以看到状态代码。

关于asp.net-mvc - 您如何处理对返回除 ViewResult 以外的结果的操作的授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1472610/

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