Asp.net mvc 为什么';这不是我指定的路线吗?
标准MVC 5模板。Asp.net mvc 为什么';这不是我指定的路线吗?,asp.net-mvc,asp.net-mvc-5,url-routing,asp.net-mvc-routing,attributerouting,Asp.net Mvc,Asp.net Mvc 5,Url Routing,Asp.net Mvc Routing,Attributerouting,标准MVC 5模板。 因此,我试图理解并创建一个命名路由,如下所示: <a href="@Url.RouteUrl(routeName: "myroute", routeValues: new { code = "123" })">this link</a> MvcAttributeRouting当然在RoutConfig.cs中启用: public static void RegisterRoutes(RouteCollection routes) { rout
因此,我试图理解并创建一个命名路由,如下所示:
<a href="@Url.RouteUrl(routeName: "myroute", routeValues: new { code = "123" })">this link</a>
MvcAttributeRouting当然在RoutConfig.cs中启用:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapMvcAttributeRoutes();
}
因为如果未启用,将获得:
在路由集合中找不到名为“myroute”的路由。
参数名称:name
但我得到了:
找不到资源。描述:HTTP404。你需要的资源
正在查找的(或其依赖项之一)可能已被删除,
其名称已更改,或暂时不可用。请复习
请输入以下URL并确保其拼写正确
请求的URL:/Home/DoIt
我做错了什么
编辑:显然,我对Route属性做了一些错误的处理,因为即使这样也不起作用:
[Route("DoIt")]
或
两者都给我404,不管请求URL是什么,或者放置mapmvcatteroutes
行的顺序是很重要的。你把它放错地方了。必须在默认路由之前调用它
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Add this to get attribute routes to work
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
路由的工作原理类似于switch case语句。第一场比赛获胜。但如果您将默认路由放在第一位,它将使用0、1、2或3个段匹配每个URL,并有效地覆盖这些长度的任何属性路由
参考资料:您是否尝试过直接从浏览器访问您的操作?我是说你的主人/家/工作。如果它还引发404错误,那么您的问题可能来自路由配置 可能您没有启用路由属性配置。检查以下各项: 从MSDN: 要启用属性路由,请在 配置
[Route("Home/DoIt")]
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Add this to get attribute routes to work
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}