C# MVC 5路由问题ActionResult根
我对MVC中的路由有疑问 我创建了一个简单的网站,我定义了一个名为C# MVC 5路由问题ActionResult根,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我对MVC中的路由有疑问 我创建了一个简单的网站,我定义了一个名为HomeController.cs public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{i
HomeController.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 }
);
}
已定义mypublic ActionResult网页(int id)
id是我正在显示的页面的id。我的路线将类似于:
当前:
http://localhost:5000/Home/WebPage/1
http://localhost:5000/1
我想要的是:
http://localhost:5000/Home/WebPage/1
http://localhost:5000/1
我当前的RouteConfig.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 }
);
}
我试过在RouteConfig.cs
中分配不同的路线,但我卡住了,有人能给我指出正确的方向吗
我在StackOverflow上搜索了与此类似的内容,但没有找到。如果对
id
值应用约束,Felipe的建议将起作用
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "WebPage",
url: "{id}",
defaults: new { controller = "Home", action = "WebPage" },
constraints: new { id = @"\d+" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
您应该尝试路由属性,它可能会对您有所帮助
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
**routes.MapMvcAttributeRoutes();**
routes.MapRoute(
name: “Default”,
url: “{controller}/{action}/{id}”,
defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional });
}
像这样使用属性
[Route(“{id:int}”)]
public ActionResult WebPage(int id) { … }
答案 在我的控制器中:
[RoutePrefix(“”)
和我的方法网页[Route({id?}”)]
RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "WebPage",
url: "{id}",
defaults: new { controller = "Home", action = "WebPage" }
);
routes.MapRoute(
name: "Default",
url: "{action}/{id}",
defaults: new { controller = "Home", action = "Index",id = UrlParameter.Optional }
);
}
}
也许,将您的操作定义为
public ActionResult WebPage(int-id)
,并添加一个根路由:routes.MapRoute(名称:“root”,url:{id}),默认值:new{controller=“Home”,action=“WebPage”})代码>你不能(除非你要创建一个路由约束,因此如果路由值是int
它将使用该方法),你需要一些东西来唯一地标识你的路由。在这里找到我的Answere!如果id是字符串值怎么办?约束不满足,因此应用程序将尝试匹配下一个路线图,在本例中为默认值
。例如,给定URLhttp://hostname/x
,默认映射实际上匹配,因此应用程序将尝试执行XController
的索引
操作。