我使用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
页面出现。
我做错了什么?
答案 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)
我的猜测是,当你尝试这个网址时:
它不起作用,因为您已从路由配置中删除了默认路由。我不知道你是否自己删除了它,但RoutesConfig.cs文件通常带有以下默认路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
此代码确保如果用户未提供控制器或操作,则站点将默认为主控制器的索引操作(您可以在defaults参数下看到)。这也可以解释为什么当你尝试这条路线时它会起作用: