使用 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 系列 5 MVC框架路由(上)

使用属性路由定义的路径模板是不是被视为硬编码?

ASP.NET Core 更改 AccessDenied 路由

asp.net mvc 路由:如何使用默认操作但非默认参数?

ASP.NET MVC 通过方法属性路由 [关闭]

ASP.NET MVC 路由:绕过路径的静态文件处理程序