微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET MVC 中的自定义 CustomAuthenticationAttribute 依赖参数

如何解决ASP.NET MVC 中的自定义 CustomAuthenticationAttribute 依赖参数

我如何为 ASP.NET MVC 5 中的动作创建 CustomAuthenticationAttribute 依赖参数,我的意思是如果我发送到模块 5,这意味着获取数据相关的老师,如果我发送 3 作为模块中的参数,回学生。我想添加两个权限(学生和教师)以允许用户访问学生或教师或两者。

[CustomAuthentication(PermissionCode = "Student_View")]
public ActionResult Index(int module)
{
}

我有问题,因为 CustomAuthentication 相关页面代码(我将添加两段代码)student_View 和 Teacher_View

解决方法

我相信您仍然可以使用传入的 AuthorizationContext 访问操作参数,具体取决于您的属性设置方式,执行类似于 this 的操作。我是从 AuthorizeAttribute 继承的,但只要您可以访问 Request 对象,这应该适用于其他类型的属性。

您还可以通过将 "module" 属性名称传递给属性来使其动态化:

public class CustomAuthenticationAttribute : AuthorizeAttribute {
    public string ParamName { get; set; }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
        if (!string.IsNullOrEmpty(ParamName)) {
            if (filterContext.RequestContext.HttpContext.Request.QueryString[ParamName] != null) { // If using GET
                int module = int.Parse(filterContext.RequestContext.HttpContext.Request.QueryString[ParamName]);

                // Do something with module
            } else if (filterContext.RequestContext.HttpContext.Request.Form[ParamName] != null) { // If using POST (I have not tested Form before myself)
                int module = int.Parse(filterContext.RequestContext.HttpContext.Request.Form[ParamName]);

                // Do something with module
            }
        }
    }
}

然后你会像这样使用它:

[CustomAuthentication(ParamName = "module")]
public ActionResult Index(int module) { }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。