Asp.net mvc 3 用于检查数据库中是否存在参数的自定义ActionFilter

Asp.net mvc 3 用于检查数据库中是否存在参数的自定义ActionFilter,asp.net-mvc-3,action-filter,Asp.net Mvc 3,Action Filter,您好,我正在寻找解决此问题的解决方案。我正在使用Asp.net mvc3构建一个Web应用程序。 我想创建一个自定义操作筛选器([KeyAuthorization]),以便只有授权的密钥才能访问控制器 这是我的默认路线 routes.MapRoute( "Default", // Route name "{guid}/{controller}/{action}", // URL with parameters

您好,我正在寻找解决此问题的解决方案。我正在使用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-234正确(已授权),则用户将看到内容,否则web应用程序将抛出404

如何才能做到这一点

谢谢,


如何生成和操作筛选器以检查guid参数是否存在于中

您可以通过创建一个
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() {
}

Thankyouuuu BuildStarted这是我一直在寻找的使用动作过滤器来检查数据库中的某些值只有当您在更多动作上需要此逻辑时才有意义,否则最好检查动作中的值,而不是选择返回哪个视图。另一种方法是使用路由约束是的,我在所有动作上都需要它,是某种api