0

我正在使用 ASP.NET 4.5 开发 ASP.NET WebForms 应用程序

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

http://myApplication.net/DemoTenant1/

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

公共静态字符串 getTenant(HttpRequest 请求)
{
    return = request.Url.ToString();       
}

现在的问题是,我们有 200 多个租户,我们需要为每个租户定义一个 WebApplication,它是

  • 一堆工作:-)
  • 可能非常低效,因为每个租户都有自己的工作进程被打开

我正在寻找一个与旧 URL 保持兼容的智能替代品。

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

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

4

1 回答 1

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。

于 2013-07-22T00:09:37.073 回答