Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 基于整个URL更改应用程序行为_.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc Routing - Fatal编程技术网

.net 基于整个URL更改应用程序行为

.net 基于整个URL更改应用程序行为,.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,这听起来可能很奇怪。我希望有两个相同的应用程序实例根据用于访问它们的URL表现出不同的行为 我在IIS上部署了两个应用程序实例,让我们调用它们的路径dev.routeone和dev.routewo。两个实例都指向同一个源。现在,假设我在这个项目的MainController中有两个动作,ActionOne和ActionTwo,分别链接到HTML视图viewone.cshtml和viewtwo.cshtml 路由配置的设置如下所示(在注册表项中): 使用此设置,两个IIS实例的行为相同: http

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

我在IIS上部署了两个应用程序实例,让我们调用它们的路径
dev.routeone
dev.routewo
。两个实例都指向同一个源。现在,假设我在这个项目的
MainController
中有两个动作,
ActionOne
ActionTwo
,分别链接到HTML视图
viewone.cshtml
viewtwo.cshtml

路由配置的设置如下所示(在
注册表项中):

使用此设置,两个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.routewo
将两条路由指向相反方向:

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并使用它来确定行为?

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


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


此格式不是动态的,但可以扩展以处理更多日益复杂的情况。

您希望多个应用程序具有不同的基本路径,但具有相同的相对路径?基本上,是的。虽然多个应用程序具有相同的源代码,但可能是这样?你误解了。我这样做是为了创建单独的路由,但两个应用程序的行为相同。我希望使用不同的主机名访问应用程序(如您所述),但我希望它们根据访问的主机名执行不同的操作,而无需编写两个单独的网站。
http://dev.routeone/ -> ActionOne
http://dev.routetwo/ -> ActionTwo
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 }
    );
}