【问题标题】:How can I set up multi-tenancy in a WebForms application using an IRouteHandler?如何使用 IRouteHandler 在 WebForms 应用程序中设置多租户?
【发布时间】:2011-12-09 06:24:08
【问题描述】:

我有一个基于 ASP.NET 4 WebForms 的应用程序,我想使用路由来允许多租户,例如 http://www.example.com/site/foo/Default.aspx 用于名为“foo”的客户端,http://www.example.com/site/bar/Default.aspx 用于名为 bar 的客户端.

我做到了:

// Global.asax in Application_Start
routes.Add("ClientSelector", new System.Web.Routing.Route
(
   "site/{client}/{*path}",
   new Lcmp.Web.Configuration.ClientRoute()
));


public class ClientRoute : System.Web.Routing.IRouteHandler
{
    private string m_Path;
    private string m_Client;

    public ClientRoute() { }

    public bool IsReusable
    {
        get { return true; }
    }

    public IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
    {
        this.m_Path = (string)requestContext.RouteData.Values["path"];
        this.m_Client = (string)requestContext.RouteData.Values["client"];

        string virtualPath = "~/" + this.m_Path;

        bool shouldValidate = false;

        if (shouldValidate && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(
            virtualPath, requestContext.HttpContext.User,
                          requestContext.HttpContext.Request.HttpMethod))
        {
            requestContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            requestContext.HttpContext.Response.End();
            return null;
        }
        else
        {
            HttpContext.Current.RewritePath(virtualPath);
            HttpContext.Current.Items.Add("Client", this.m_Client);
            return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page));
        }
    }
}

它似乎适用于初始 .aspx 页面。但是路由正在拾取 .js 和其他不可编译的资源并抛出异常。避免路由这些的最佳方法是什么?

【问题讨论】:

    标签: asp.net webforms asp.net-mvc-routing multi-tenant


    【解决方案1】:

    can use the StopRoutingHandler() to ignore requests for certain files

    routes.Add(new Route("*{js}", new {js=@".*\.js(/.*)?", new StopRoutingHandler()));
    

    【讨论】:

    • 啊,是的,我会标记为答案。但我的问题很糟糕 - 实际上,我也需要路由其他元素(至少 asmx),并以某种方式修复它。谢谢!我发布了另一个问题:stackoverflow.com/questions/8527677/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多