问题描述
我如何为 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) { }