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

时间:2017-05-26 13:42:04

标签: asp.net-mvc asp.net-mvc-routing

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

1)RouteConfig.cs

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

2)HomeController.cs

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

3)Index.cshtml

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

Home page

我的页面有错误:

HTTP 403.14 - Forbidden

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

http://localhost:50600/Home/Index

页面出现。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

删除" Home"从路径开始,控制器名称HomeController已经开始使用" Home"。如果你想改变那个" Home"前缀,您可以向HomeController类添加一个属性来定义它。

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

答案 1 :(得分:0)

我想我现在知道你的问题是什么。您希望默认网址在Index中显示HomeController视图,但您未设置默认路由。您可以通过在RouteConfig.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" }
);

答案 2 :(得分:0)

我的猜测是,当你尝试这个网址时:

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