【问题标题】:Route all URL's to Home controller action C# MVC将所有 URL 路由到 Home 控制器操作 C# MVC
【发布时间】:2020-09-16 14:50:36
【问题描述】:

我想在 c# 中创建一个 URL 重定向器,所以每当我的 MVC 应用程序基本 url 被参数击中时,我想根据 url 中的参数(站点、文件夹、文件、id 等)将它重定向到其他 url ) 例如:http://localhost:8080/site/folder/file/id 或 http://localhost:8080/site/folder/file 或 http://localhost:8080/site/folder 等。 所以请求url可以是任意类型,只有base url是固定的。

我尝试将默认路由更新为

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

我也尝试创建一个自定义的新路线

routes.MapRoute(
    "DCTM",                                             // Route name
    "Da/{objectId}",                                    // URL with parameters
    new { controller = "Home", action = "Redirector" }  // Parameter defaults
);

但是上述两种方法都给出了错误。可以做些什么来实现这一目标?

【问题讨论】:

  • 你能举一个传入URL的具体例子吗?例如,当您说“URL 中的参数”时,您的意思是要将 http://localhost:8080?site=x&folder=y&file=z&id=1 之类的内容转换为 http://localhost:8080/x/y/z/1 吗?
  • 传入 URL:localhost:8080/x/y/z/1,我想从 url 中读取 x,y,z 并将其重定向到具有 x,y,z 参数的其他 url
  • 什么是“其他 URL”……那个 URL 会是什么样子?如果您不提供具体示例,我们无法提出解决方案。还要记住,MVC 中的路由点​​是指向特定的操作方法。您能准确解释一下转换 URL 的目的吗?当然,您只需要确保如果用户键入localhost:8080/x/y/z/1,它会执行正确的操作。想要改变它的原因是什么,它会给你带来什么?
  • 我已经清楚地提到了所有有问题的东西
  • 恕我直言,如果您提到了所有内容,那么我不会要求您澄清它。所以明确告诉我们,如果用户输入localhost:8080/x/y/z/1,你想用它做什么,为什么?你说你想把它重定向到另一个 URL,但你没有说那个 URL 应该是什么,或者它与你的控制器和操作有什么关系。

标签: c# asp.net asp.net-mvc routes webapi


【解决方案1】:

我有办法!!! 将 Web 应用程序的任何传入 url 重定向到任何其他 Web 应用程序,如下所示

  • 将 RouteConfig.cs 更新为
 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

            routes.MapRoute(
                 name: "Dctm",
                 url: "{*nodeAliasPath}",
                 defaults: new { controller = "Home", action = "Redirector", id = UrlParameter.Optional }
             );
        }
  • 现在在 HomeController.cs 中添加目标 url 并将源 url 附加到它
 public ActionResult Redirector()
        {
            string destinationURL = "Destination base url" + Request.RawUrl; // combine the destination base url and source url parameters. 
            return Redirect(destinationURL);
        }

输出:

  • 来源网址:https://localhost:44306/Abc/Xyz/632-sn232-erh4
  • 重定向网址:https://localhost:44396/Abc/Xyz/632-sn232-erh4

【讨论】:

  • 我很高兴你找到了适合你的东西。但实际上对于这样一个简单的情况,例如您给出的示例,您只更改基本 URL,IIS 重写规则可以完成相同的工作,而开销远低于 MVC 应用程序。 (而且这些规则也可以处理更复杂的情况)。
  • 感谢@ADyson 的建议,但我需要采用这种方法,因为它是拥抱逻辑中的一小步,因此只需要在 MVC 中执行此操作
  • 我并不是说您不需要 MVC 应用程序来执行其他逻辑,而是说您不需要它来执行此特定任务。
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多