自定义操作筛选器以检查数据库中是否存在参数

时间:2011-07-12 14:14:02

标签: asp.net-mvc-3 action-filter

您好,我正在寻找解决此问题的解决方案。我正在使用Asp.net mvc3构建一个Web应用程序。 我想创建一个自定义动作过滤器([KeyAuthorization]),以便只有授权的密钥才能访问控制器。

这是我的默认路线

routes.MapRoute(
                "Default", // Route name
               "{guid}/{controller}/{action}", // URL with parameters
               new { guid = UrlParameter.Optional, controller = "Home", action = "Index", }

所以,请说有人访问 www.example.com/34safd-234s/home/index

如果密钥:34safd-234s正确(授权),则用户将看到内容,否则网络应用将抛出404.

如何实现这一目标?

谢谢,

如何构建和操作过滤器,检查

中是否存在guid参数

1 个答案:

答案 0 :(得分:2)

您可以通过创建ActionFilterAttribute来实现。这应该让你朝着正确的方向前进。您需要在评论时进行验证。

public class KeyAuthorizationAttribute : ActionFilterAttribute {
    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        var guidValue = filterContext.RouteData.Values["guid"];
        if (guidValue != null) {
            Guid guid = new Guid(guidValue.ToString());
            bool notValid = true;
            //do validation
            //set notValid = false if authorization passes             

            if (notValid) {
                filterContext.Result = new HttpNotFoundResult();
            }
        }
    }
}

然后,您可以将此操作应用于您的操作。

[KeyAuthorization]
public ActionResult Index() {
}