使用 asp.net 属性路由的根路径的默认路由
Posted
技术标签:
【中文标题】使用 asp.net 属性路由的根路径的默认路由【英文标题】:Default route for root path using asp.net attribute routing 【发布时间】:2013-10-01 21:23:03 【问题描述】:我正在使用来自 ASP.NET 5 RC 的属性路由,包含在 Visual Studio 2013 RC 版本中。
我希望根路径 /
能够通向规范的 /Home/Index
路径,但我找不到仅使用属性路由的方法。是否有可能,如果没有,如果我也在使用 OWIN SelfHost,我该怎么做?换句话说,我在WebApp.Start<T>
方法中手动设置了我自己的HttpConfiguration
类(其中T
在启动时调用了Configure(IAppBuilder)
方法),而不是通过RouteTable.Routes
对象。还是我应该通过RouteTable.Routes
对象?当我尝试它时,我没有太多运气......
编辑:这是我迄今为止尝试过的:
// normal Web API attribute routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultWeb",
routeTemplate: "controller/action",
defaults: new controller = "Home", action = "Index"
);
下面的第二次尝试看起来有点可疑,因为不清楚我的 HttpConfiguration
对象与静态 RouteTable.Routes
对象的关系:
// normal Web API attribute routes
config.MapHttpAttributeRoutes();
RouteTable.Routes.MapRoute(
name: "DefaultWeb",
url: "controller/action",
defaults: new controller = "Home", action = "Index"
);
【问题讨论】:
【参考方案1】:您可以像这样为应用设置默认路由:
[Route("~/", Name = "default")]
public ActionResult Index()
return View();
【讨论】:
我在尝试此操作时收到“当前请求在以下操作方法之间不明确:...”。我将 [RoutePrefix("home")] 添加到我的控制器定义中,并将 [Route] 更改为 [Route("index")] 以消除歧义。 /(默认)和 /home/index 现在都可以工作了。 我也得到了模棱两可的错误,并且模棱两可指向同一个控制器。我删除了上面显示的“[Route]”,现在它可以工作了。【参考方案2】:对于使用 .NET Core 1.x 的任何人,您都需要这样做并使用上面 Jay 的答案。
在您的 Startup.cs 文件中,将其添加到您的 Configure
方法中。
app.UseMvcWithDefaultRoute();
然后,任何你想作为默认的控制器动作,把属性[Route("", Name = "default")]
【讨论】:
以上是关于使用 asp.net 属性路由的根路径的默认路由的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 更改 AccessDenied 路由