2011-07-12 47 views
1

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

这是我的默认路由

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

如果key:34safd-234S正确的是(授权)比用户将看到的内容,否则该网络应用程序将扔404。

如何可以实现这一目标?

谢谢

如何建立和checkes该GUID parametre行动过滤器在

+0

使用动作过滤器检查一些值数据库使得只有当你需要更多的行动,这个逻辑意义上的,否则这将是更好地检查行动中,比选择哪个视图返回值。 – frennky

+0

是的,我需要它的所有行动,是某种API – Dynamikus

+0

另一种方法是使用路由约束http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create -custom-route-constraints.aspx –

回答

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() { 
} 
+0

Thankyouuuu BuildStarted这就是我正在寻找的 – Dynamikus

+0

很高兴能够有所帮助:) – Buildstarted