我正在尝试为控制器创建一些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的最佳做法?
最好的问候,
戈登
答案 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)
添加路线的顺序很重要。当请求进入时,一个接一个地检查路由,直到找到匹配。因此,您需要订购从最具体到最不具体的路线。
您可能已经尝试过此操作,但如果您在>>默认路线之前添加自定义路线,您还有更多运气吗?