MVC 属性路由的最简单示例不起作用



我使用VS2013并通过向导创建了MVC应用程序。我还删除了所有额外的文件,并具有以下内容:

1( 路由配置.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
}

2( 主控制器.cs

public class HomeController : Controller
{
    [Route("Home/Index")]
    public ActionResult Index()
    {
        return View();
    }
}

3( 索引.cshtml

@{
    ViewBag.Title = "Home Page";
}
Home page

我看到页面有错误:

HTTP 403.14 - Forbidden

但是,如果我手动添加到浏览器地址栏中的 URL - 主页/索引:

http://localhost:50600/Home/Index

此时将显示页面。

我做错了什么?

从路由中删除"Home",因为控制器名称HomeController已经以"Home"开始您的路由。如果要更改该"Home"前缀,可以向 HomeController 类添加一个属性来定义该前缀。

此外,操作

的默认路由名称将与操作名称匹配,因此在这种情况下,您可以使用 [Route("")] 并且 url/Home/Index 将起作用。

我的猜测是,当您尝试此网址时:

http://localhost:50600

它不起作用,因为您已从路由配置中删除了默认路由。我不知道你是否自己删除了它,但 RoutesConfig.cs 文件通常带有以下默认路由:

routes.MapRoute(
   name: "Default",
   url: "{controller}/{action}/{id}",
   defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

此代码可确保如果用户不提供控制器或操作,站点将默认为主控制器的索引操作(您可以在 defaults 参数下看到(。这也可以解释为什么当你尝试这条路线时它有效:

http://localhost:50600/Home/Index。

我想

我知道你现在有什么问题了。您希望默认网址显示在HomeController Index视图中,但尚未设置默认路由。您可以通过在路由配置中添加以下行来设置默认路由.cs

config.Routes.MapRoute(
   name: "Default",
   routeTemplate: "{controller}/{action}",
   defaults: new { controller = "Home", action = "Index" }
);

或者,如果您希望仅使用属性路由而不与路由模板混合,则可以按如下方式添加默认路由:-

config.Routes.MapRoute(
    name: "Index",
    url: "",
    defaults : new { controller = "Home", action = "Index" }
);

最新更新