更改URL路由名称ASP.NET MVC

时间:2017-06-23 19:54:35

标签: c# asp.net asp.net-mvc-5

我在创建我的网络应用程序的控制器类时犯了错误,现在我的网址如下所示:/ 博客 / 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错误。 有没有办法解决这个问题而不必重新开始?

3 个答案:

答案 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