gpt4 book ai didi

asp.net - 授权属性内的 UrlHelper 和 ViewContext

转载 作者:行者123 更新时间:2023-12-02 17:48:50 24 4
gpt4 key购买 nike

我有一个无法解决的场景:

我正在尝试为 mvc 创建自己的自定义授权属性。我想添加的主要功能是能够更改用户不处于某个角色时重定向的位置。我不介意如果他们没有经过身份验证,系统会将它们发送回登录页面,但如果他们经过身份验证但不允许访问该操作方法,我想选择将它们发送到哪里。

这是我想做的:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public string Action;
public string Controller;

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
// if User is authenticated but not in the correct role
string url = Url.Action(this.Action, this.Controller);
httpContext.Response.Redirect(url);
}
}

作为额外的好处,我希望在进行重定向之前能够访问 ViewContext 和 TempData。

关于如何在属性中实例化 UrlHelper 和 ViewContext 有什么想法吗?

最佳答案

您可以覆盖 OnAuthorization方法:

public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}

// Call the AuthorizeCore which should return true or false
if (!this.AuthorizeCore(filterContext.HttpContext))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "controller", "home" },
{ "action", "about" },
{ "id", "foo" },
});
}
}

就 ViewData 和 TempData 而言:filterContext.Controller.ViewDatafilterContext.Controller.TempData 应该在 OnAuthorization 方法内工作。最后,如果您希望使用 UrlHelper(在本例中没有必要,因为 RedirectToRouteResult 更好),您可以实例化它:

var urlHelper = new UrlHelper(filterContext.RequestContext);

关于asp.net - 授权属性内的 UrlHelper 和 ViewContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2661405/

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