我在创建我的网络应用程序的控制器类时犯了错误,现在我的网址如下所示:/ 博客 / postname。 我希望它看起来像这样:/ 博客 / postname或更好/ 博客 / postname。
我在RegisterRoutes
中尝试了Global.asax.cs
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
"BlogPage",
"blog/{action}/{id}",
new { controller = "Blogs", action = "Index", id = "" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Blogs", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
但是当我尝试导航到localhost:######/blog
时,我收到了404错误。
有没有办法解决这个问题而不必重新开始?
答案 0 :(得分:2)
从您发布的路线中我看到控制器名称为Blogs
,如下面的已发布代码所示,但您尝试以blog
的形式访问它,然后它不应该抛出404(资源未找到)?
routes.MapRoute(
"BlogPage",
"blog/{action}/{id}",
new { controller = "Blogs", action = "Index", id = "" }
);
答案 1 :(得分:0)
如果您正在尝试/ blog / postname,那么您根本不需要在网址中添加{action}。
routes.MapRoute(
"BlogPage",
"blog/{postname}",
new { controller = "Blogs", action = "Index", postname = UrlParameter.Optional }
);
您的索引操作将如下所示:
public ActionResult Index(string postname = "")
{
if(postname == "")
{
// show list of posts or some other content
} else {
// find content from postname and show that
}
}
答案 2 :(得分:0)
我无法相信这是如此简单(我甚至有点惭愧让我花了很多时间来找到我做错了什么),但我终于做到了!
我正在将代码添加到Global.asax.cs
- 正如我的问题和this tutorial中所述。
但是正确的方法,或者至少是有效的方式,是将完全相同的代码添加到RouteConfig.cs
文件中。
所以,答案是将我的问题中完全相同的代码添加到RouteConfig.cs
文件中,而不是Global.asax.cs
。