C# 数字标识的URL约束

C# 数字标识的URL约束,c#,asp.net-mvc,url-routing,C#,Asp.net Mvc,Url Routing,我试图为控制器创建一些URL约束,以防止空引用异常 比如说 /文件夹/编辑/3应该可以 /文件夹/编辑/asdf不应该正常 我不想在每个操作方法上都添加正则表达式,而是想使用URL约束来实现这一点 我现在面临的问题是,默认路由捕获所有请求,或者如果我将该约束添加到默认路由,那么标准请求就不再工作了 我试图添加的约束是 routes.MapRoute( "RouteWithContraint", "folder/edit/{id}", new { controller="f

我试图为控制器创建一些URL约束,以防止空引用异常

比如说

/文件夹/编辑/3应该可以

/文件夹/编辑/asdf不应该正常

我不想在每个操作方法上都添加正则表达式,而是想使用URL约束来实现这一点

我现在面临的问题是,默认路由捕获所有请求,或者如果我将该约束添加到默认路由,那么标准请求就不再工作了

我试图添加的约束是

routes.MapRoute(
    "RouteWithContraint",
    "folder/edit/{id}",
    new { controller="folder", action="edit", id="" },
    new { id = @"\d+" }
);
有人能给我一个关于如何解决那个问题的提示吗?或者,也许有人知道一个最佳的做法,干为“IsANumber”检查身份证

致以最良好的祝愿


Gordon

如何创建自定义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:)但我认为这是压倒性的,您认为如何?也许我们可以直接用路线做些什么……是的,这是关于快速解决方案。适当的可能是扩展路由功能。您是否测试过此解决方案Randolpho?:O