这可能听起来很奇怪。我希望根据用于访问应用程序的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
我不确定这是可行的还是可取的,但我对任何解决方案持开放态度。有没有办法回顾'通过不受应用程序控制的URL并使用它来确定行为?
答案 0 :(得分:0)
答案 1 :(得分:0)
看到我知道将要访问该网站的两个网址,我能够做到这一点(请注意稍微不同的格式,因为我已经为这些操作引入了ID
参数):< / p>
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 }
);
}
这种格式不是动态的,但可以扩展以处理更多复杂性增加的情况。