首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义IRouteHandler路由搞砸了MVC链接构建

自定义IRouteHandler路由搞砸了MVC链接构建
EN

Stack Overflow用户
提问于 2010-12-04 09:31:54
回答 2查看 928关注 0票数 1

我在ASP.NET MVC2中有一个自定义的路由处理程序,可以捕获所有url的前缀路径,如下所示:

代码语言:javascript
复制
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

路由工作得很好,但如果我使用Html.Actionlink或从控制器返回ReturnToAction(),构建的uri会创建一个损坏的uri,如下所示:

代码语言:javascript
复制
/@api?action=Add&controller=Home

而不是

代码语言:javascript
复制
/Home/Add

如何影响uri构建逻辑以考虑默认路由模式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-04 23:31:47

我想出了一个方法来阻止所描述的行为。虽然这“解决”了问题,但它真的很糟糕,我更喜欢一种更简洁的方法,将路由排除在虚拟路径构建逻辑之外

代码语言:javascript
复制
routes.Add(
  new Route("@api/{*all}",
  // A random and unlikely controller name as the default
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
  // and a constraint requiring any controller to be that random, default value
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } }, 
  new ApiHandler()
);

这意味着只有当有问题的控制器是"qwewqewqeqweq“时,路由才会被选择用于虚拟路径构建,希望这是不太可能的。我说过这很下流。

票数 1
EN

Stack Overflow用户

发布于 2010-12-04 18:54:13

您可以使用RouteLink助手指定路由的名称:

代码语言:javascript
复制
<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4351415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档