2

是否有可能拥有一个 .NET MVC 应用程序,并且可以从不同的域访问它,从而使内容依赖于域?

例如,www(dot)site1(dot)com 和 www(dot)site2(dot)com 都将指向我服务器的 IP,并指向 IIS 中的同一个网站。我的 .NET MVC 应用程序将驻留在该网站中。现在,我希望能够知道哪个站点(域名)触发了 ControllerAction,并采取相应的行动(例如,在 Index 操作中为主页显示不同的内容,或者允许/阻止访问分配给特定站点的特定内容) .

我将不胜感激这方面的任何帮助。我可以接受传递给所有控制器操作的额外参数(可能使用路由),但如果有更优雅的解决方案将是理想的。

4

5 回答 5

2

好吧,您始终可以从 Request.RawUrl 属性中获取域。

正如 Mercer 所提到的,将它们部署为两个独立的 Web 应用程序将是一个更好的解决方案。如果这不可能,我会尝试设计一些相对通用的东西来检查域并为每个域返回不同的视图。

于 2009-07-09T14:39:23.647 回答
1

您可以使用以下内容轻松访问请求中使用的域名:

switch(Request.ServerVariables("SERVER_NAME"))
{
    case "www.site1.com":
        //do something
    case "www.site2.com":
        //do something else
    default:
        //????
}

您可以在可以访问 Request 对象的任何地方执行此操作。

于 2009-07-09T14:51:16.913 回答
1

我写了一篇关于如何使用示例 Web 应用程序下载的博客文章。

它使用一个抽象的基础控制器,它知道它被调用的站点——通过创建从这个基类继承的控制器,您可以自动访问当前请求的当前“站点”。

它还允许您从单个数据库加载所有站点 - 如果您在共享主机上,或者如果您运行自己的服务器,则可以为您节省一点托管费用,您不必为您创建的每个网站。

于 2009-07-20T12:07:33.307 回答
0

一个优雅的解决方案是为 2 个域进行 2 次部署,并分离内容。

您仍然可以拥有共同的内容,但是在应用程序内部不对其进行硬编码的情况下分离内容是一种成功的局面。

于 2009-07-09T14:34:50.147 回答
0

如果您使用不同的数据库将数据分开,则在会话开始中配置应用程序以使用基于服务器名称变量的数据库之一。然后将工作连接字符串放入用户的会话中。

protected void Session_Start(Object sender, EventArgs e)
{
  NameValueCollection NVCSrvElements = Request.ServerVariables;
  switch (NVCSrvElements.Get("SERVER_NAME")) 
  { 
      case "www.whatever1.com":
          Session["ConnStr"]="db1 connection string";
          break;
      case "www.whatever2.com":
          Session["ConnStr"] = "db2 connection string";
          break;
  }                  
}

然后在应用程序的其余部分使用此连接字符串。

于 2009-07-09T16:09:02.687 回答