【发布时间】:2021-07-14 20:55:13
【问题描述】:
我有一个解决方法,但我真的很想知道为什么这在 MVC 中似乎不起作用。 (.Net 4.6.1)
我有一个控制器,我想使用 RoutePrefix:
[RoutePrefix("entry")]
public class DefaultController : Controller
{
[HttpGet]
[Route(), Route("Index")]
public ActionResult Index()
{
// ...
}
}
在路由配置中:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "entry", action = "index", id = UrlParameter.Optional }
问题在于,使用此配置,在本地 IIS 下运行进行测试,导航到“localhost/testApp/entry”有效,“localhost/testApp/entry/index”有效,但是默认的“localhost/testApp/”结果在 404 中。
这一直让我头疼,因为在一个带有默认控制器且默认设置为“home”和“index”的新项目中,“localhost/testApp”会毫无问题地呈现 Home/Index。
我将其缩小到RoutePrefix 是问题所在。如果我删除 RoutePrefix 并将默认值更改为:new { controller = "default", action = "index", id = UrlParameter.Optional }
然后“localhost/testApp”可以工作,但显然这需要对其他路由使用 /default 而不是 /entry。
另外,如果我保留前缀(将默认控制器切换回“entry”)并将Route("~/") 添加到Index 方法中,那么“localhost/testApp”也可以根据文档中的a ~ route 覆盖路由前缀。
我想知道是否有解释为什么 RoutePrefix 似乎与默认路由不兼容?我可以为该默认操作添加一个 ~/ 路由,但我似乎对 RoutePrefix 的使用方式有所了解。
【问题讨论】:
标签: c# asp.net asp.net-mvc