数字ID的URL约束

时间:2009-08-05 08:49:40

标签: c# asp.net-mvc url-routing

我正在尝试为控制器创建一些URL约束,以防止出现空引用异常。

例如

/ folder / edit / 3应该没问题

/ folder / edit / asdf应该没问题

我没有在每个操作方法上添加正则表达式,而是使用URL约束。

我现在面临的问题是默认路由捕获所有请求,或者如果我将该约束添加到默认路由,则http://host.tld/之类的标准请求不再起作用。

我想添加的约束是

routes.MapRoute(
    "RouteWithContraint",
    "folder/edit/{id}",
    new { controller="folder", action="edit", id="" },
    new { id = @"\d+" }
);

有没有人对我如何解决这个问题提示?或者也许有人知道关于“Isanumber”检查ids的DRY的最佳做法?

最好的问候,

戈登

2 个答案:

答案 0 :(得分:1)

如何创建自定义ActionFilterAttribute以检查某些操作和/或控制器的类型?从ActionFilterAttribute继承的类的OnActionExecuting方法示例:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      if (filterContext.RouteData.Values["action"] == "edit" && !IsProperTypeofId()) 
         RedirectToRoute(filterContext, new { controller = "General", action = "Error", id = 401 });

      base.OnActionExecuting(filterContext);
    }

答案 1 :(得分:1)

添加路线的顺序很重要。当请求进入时,一个接一个地检查路由,直到找到匹配。因此,您需要订购从最具体到最不具体的路线。

您可能已经尝试过此操作,但如果您在>默认路线之前添加自定义路线,您还有更多运气吗?