【问题标题】:Change application behaviour based on whole URL根据整个 URL 更改应用程序行为
【发布时间】:2017-12-27 17:39:14
【问题描述】:

这听起来可能很奇怪。我希望有两个相同的应用程序实例根据用于访问它们的 URL 有不同的行为。

我在 IIS 上部署了两个应用程序实例,我们将它们的路径命名为 dev.routeonedev.routetwo。两个实例都指向同一个源。现在,假设我在这个项目中的MainController 中有两个操作ActionOneActionTwo,分别链接到HTML 视图viewone.cshtmlviewtwo.cshtml

路由配置会这样设置(RegisterRoutes):

routes.MapRoute(
    name: "ActionOne",
    url: "one",
    defaults: new { controller = "MainController", action = "ActionOne" }
);

routes.MapRoute(
    name: "ActionTwo",
    url: "two",
    defaults: new { controller = "MainController", action = "ActionTwo" }
);

使用此设置,两个 IIS 实例的行为相同:

http://dev.routeone/one -> ActionOne
http://dev.routeone/two -> ActionTwo

http://dev.routetwo/one -> ActionOne
http://dev.routetwo/two -> ActionTwo

我希望有一种情况,使用相同的源代码,URL 将指示输入路由时运行的操作。特别是在这种情况下,dev.routeone 将两条路由都指向ActionOne,而dev.routetwo 则相反:

http://dev.routeone/one -> ActionOne
http://dev.routeone/two -> ActionOne

http://dev.routetwo/one -> ActionTwo
http://dev.routetwo/two -> ActionTwo

或者更好的是,在没有配置的路线的情况下适当地直接:

http://dev.routeone/ -> ActionOne
http://dev.routetwo/ -> ActionTwo

我不确定这是否可行或可取,但我愿意接受任何解决方案。有没有办法“回顾”不受应用程序控制的 URL 并使用它来确定行为?

【问题讨论】:

标签: .net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


【解决方案1】:

添加网站时,只需在此屏幕上指定相同的物理路径并使用不同的主机名:

【讨论】:

  • 你误会了。我已经这样做了,以创建单独的路由,但两个应用程序的行为相同。我希望使用不同的主机名(如您所描述的)访问应用程序,但我希望它们根据访问的主机名执行不同的操作,而无需编写两个单独的网站。
【解决方案2】:

鉴于我知道将要访问该站点的两个 URL,我能够做到这一点(注意格式略有不同,因为我已经在操作中引入了 ID 参数):

var appID = System.Web.Hosting.HostingEnvironment.ApplicationID;

if (appID.Contains("routeone")
{
    routes.MapRoute(
        name: "ActionOne",
        url: "{id}",
        defaults: new { controller = "MainController", action = "ActionOne", id = UrlParameter.Optional }
    );
}

if (appID.Contains("routetwo")
{
    routes.MapRoute(
        name: "ActionTwo",
        url: "{id}",
        defaults: new { controller = "MainController", action = "ActionTwo", id = UrlParameter.Optional }
    );
}

这种格式不是动态的,但可以扩展以处理越来越复杂的更多情况。

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 2016-01-12
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多