【问题标题】:How to change URL in MVC c#?如何在 MVC c# 中更改 URL?
【发布时间】:2017-05-30 07:01:35
【问题描述】:

以下是 Home Controller 中的代码:

public ActionResult Index()
        {
            return View();
        }
        public ActionResult AboutUs()
        {
            return View();
        }

以下是我的 RouteConfig.cs 中的代码

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

            routes.MapRoute(
                 "AboutUsPage",
                 "about",
                 new { Controller = "Home", action = "AboutUs", });

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

现在,如果我点击地址“localhost:9731/Home/AboutUs”,那么它将在 Home Controller 中点击我的 AboutUs 操作。同样,如果我点击地址“localhost:9731/about”,那么它将在 Home Controller 中点击我的 AboutUs 操作,因为 RouteConfig.cs 中的 URL 重写。

问题是当用户在地址栏中点击“localhost:9731/Home/AboutUs”时如何显示“localhost:9731/about”??。请帮我。谢谢。

【问题讨论】:

  • 我认为你有语法错误action = "AboutUs", 你需要去掉那个逗号

标签: c# url model-view-controller rewriting


【解决方案1】:

实现此目的的一种方法是将 301 永久重定向到新路由。所以你可以有一个重定向控制器:

public class RedirectController : Controller
{
    public ActionResult Index(string redirectToAction, string redirectToController)
    {
        return this.RedirectToActionPermanent(redirectToAction, redirectToController);
    }
}

然后配置您的旧路由以重定向到新路由:

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

    routes.MapRoute(
        "AboutUsPage",
        "about",
        new { controller = "Home", action = "AboutUs", });

    routes.MapRoute(
        name: "AboutUsLegacy", 
        url: "Home/AboutUs", 
        defaults: new {
            controller = "Redirect",
            action = "Index",
            redirectToAction = "AboutUs",
            redirectToController = "Home" });

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

在此示例中,我们在默认路由之前添加了一个新路由,它将侦听您要重定向的旧路由 (/Home/AboutUs),然后它将发出 301 重定向到 /about

【讨论】:

  • 谢谢。 @Darin Dimitrov 它对我有用。我们可以对 www.xyz.com 到 xyz.com 实施相同的操作吗??
  • 当然,实现这一目标的一种方法是有一个全局的Application_BeginRequest ASP.NET 事件来处理这个问题:stackoverflow.com/a/3197446/29407
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2017-05-30
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多