根据整体更改应用程序行为 URL
Change application behaviour based on whole URL
这听起来可能很奇怪。我希望有两个相同的应用程序实例根据用于访问它们的 URL 表现不同。
我在 IIS 上部署了两个应用程序实例,我们将它们的路径称为 dev.routeone
和 dev.routetwo
。两个实例都指向同一个源。现在,假设我在这个项目的 MainController
中有两个操作,ActionOne
和 ActionTwo
,链接到 HTML 个视图 viewone.cshtml
和 viewtwo.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
我不确定这是否可行或可取,但我愿意接受任何解决方案。有没有办法 'look back' 超过不受应用程序控制的 URL 并使用它来确定行为?
添加网站时,只需在此屏幕上指定相同的物理路径并使用不同的主机名:
鉴于我知道将要访问该站点的两个 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 }
);
}
此格式不是动态的,但可以扩展以处理越来越复杂的更多情况。
这听起来可能很奇怪。我希望有两个相同的应用程序实例根据用于访问它们的 URL 表现不同。
我在 IIS 上部署了两个应用程序实例,我们将它们的路径称为 dev.routeone
和 dev.routetwo
。两个实例都指向同一个源。现在,假设我在这个项目的 MainController
中有两个操作,ActionOne
和 ActionTwo
,链接到 HTML 个视图 viewone.cshtml
和 viewtwo.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
我不确定这是否可行或可取,但我愿意接受任何解决方案。有没有办法 'look back' 超过不受应用程序控制的 URL 并使用它来确定行为?
添加网站时,只需在此屏幕上指定相同的物理路径并使用不同的主机名:
鉴于我知道将要访问该站点的两个 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 }
);
}
此格式不是动态的,但可以扩展以处理越来越复杂的更多情况。