Sea*_*lor 70 asp.net-mvc asp.net-mvc-2
在尝试让我的应用程序正确生成404错误时,我在路由表的末尾实现了catch all route,如下所示:
routes.MapRoute(
"NotFound", _
"{*url}", _
New With {.controller = "Error", .action = "PageNotFound"} _
)
Run Code Online (Sandbox Code Playgroud)
但是,为了使这个工作,我不得不删除默认路由:
{controller}/action/{id}
Run Code Online (Sandbox Code Playgroud)
但是现在已经删除了默认设置,我的大部分操作链接都不再有效,而我找到让它们再次工作的唯一方法是为每个控制器/操作添加单独的路由.
是否有更简单的方法,而不是为每个控制器/操作添加路由?
是否可以创建一个默认路由,如果用户尝试导航到未知路由,仍然允许捕获所有路由?
Rob*_*nik 104
在您的情况下,您应该定义默认路由{controller}/{action}/{id}并对其进行约束.可能与控制器名称或甚至动作有关.然后把它全部放在它之后它应该工作得很好.
因此,当有人要求资源失败时,catch-all路径将匹配请求.
所以.首先使用路由约束定义默认路由,然后在之后捕获所有路由:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "Home|Settings|General|..." } // this is basically a regular expression
);
routes.MapRoute(
"NotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);
Run Code Online (Sandbox Code Playgroud)
Pra*_*sad 22
//this catches all requests
routes.MapRoute(
"Error",
"{*.}",
new { controller = "PublicDisplay", action = "Error404" }
);
Run Code Online (Sandbox Code Playgroud)
在路由表的末尾添加此路由
啊,问题是你的默认路由捕获所有3段网址.这里的问题是路由在我们确定谁将处理请求之前运行.因此,任何三个段URL都将匹配默认路由,即使它稍后结束,没有控制器来处理它.
您可以做的一件事是在您的控制器上覆盖HandleMissingAction方法.您还应该使用标记来捕获所有404问题.
| 归档时间: |
|
| 查看次数: |
62917 次 |
| 最近记录: |