我使用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" }
);