用于多租户的ASP.NET虚拟目录的替换

时间:2013-07-18 10:35:03

标签: asp.net c#-4.0 webforms isapi-extension

我正在使用ASP.NET 4.5

开发ASP.NET WebForms应用程序

该应用程序具有多租户支持。每个租户都有自己的URL,如:

http://myApplication.net/DemoTenant1/

在Login.aspx中非常简化,应用程序调用此方法并将此URL转换为内部ID。

public static string getTenant(HttpRequest request)
{
    return = request.Url.ToString();       
}

现在的问题是,我们有超过200个租户,我们需要定义一个WebApplication

  • 一堆工作: - )
  • 可能非常低效,因为每个租户的自己的工作流程都是开放的

我正在寻找一个智能替代品,我可以与旧网址保持兼容。

我正在寻找如何通过URL路由解决这个问题或者将WebForms与MVC混合并添加登录控制器的想法?

也对其他想法持开放态度......

1 个答案:

答案 0 :(得分:1)

我同意亚历山大所说的,正确的方法是使用URL路由。 但是......如果你想节省时间......

首先,删除所有Web应用程序;

所以摆脱......

http://myApplication.net/DemoTenant1/
http://myApplication.net/DemoTenant2/
http://myApplication.net/DemoTenant3/

然后你需要确保键入以下内容:

http://myApplication.net/

...带您进入您想要使用的实际WebApplication。

然后,在global.asax文件中......您需要捕获404异常。

所以当有人输入时:

http://myApplication.net/DemoTenant1/

...它会抛出一个404异常,你可以在你的global.asax文件中捕获这样的:

void Application_Error(object sender, EventArgs e)
{
    string urlData = Request.ServerVariables["SCRIPT_NAME"];

    // do some string splitting to get the DemoTenant1 value
    // Response.Redirect("~Login.aspx?tenant=DemoTenant1");
}

它有点乱,但我过去做过这个,当时我和你的情况完全一样。虽然,您现在拥有由Microsoft构建的路由模块(我当时没有)。我非常确定您可以在Webforms中使用路由模块,而无需使用MVC。