如何在.net核心中使用基于子域的不同连接字符串

时间:2017-04-23 12:27:29

标签: sql .net asp.net-core subdomain azure-cosmosdb

我正在建立一个网站,我有一个主站点。这与SQL相关联。该站点必须具有许多子域。每个子域必须具有自己的DocumentDB连接字符串以及主连接字符串。这可能.Net Core?如果是这样,我怎样才能实现这一目标?

我已经在寻找解决方案,但却找不到充分利用的东西。

enter image description here

这就是我看到大局的方式。请给我一些如何实现这一目标的建议。谢谢!

更新 问题是,我想在主DB中存储DocumentDB的连接字符串。因此,当访问子域时,它必须从SQL获取DOcumentDB连接字符串,而不是从那里获取数据。

更新2 我不知道如何能让自己清醒过来。很难解释因为有许多方面我不了解自己。对不起。

我做了一个中间件知道我在哪里尝试获取子域名,所以我可以将其返回并使用它。 这是我到目前为止所得到的。 我的中间件:

public class ObtainSubdomainMiddleware
{
    private readonly RequestDelegate _next;

    public ObtainSubdomainMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        var subDomain = string.Empty;

        var host = context.Request.Host.Host;

        if (!string.IsNullOrWhiteSpace(host))
        {
            subDomain = host.Split('.')[0]; // How should I give back the subDomain?
        }

        // Call the next delegate/middleware in the pipeline
        return this._next(context);
    }
}

启动班:

        //Here I think I have to do something with this middleware to use the right connectionstring
        app.UseMiddleware<ObtainSubdomainMiddleware>();

1 个答案:

答案 0 :(得分:0)

  

我想将DocumentDB的连接字符串存储在主DB中。因此,当访问子域时,它必须从SQL获取DOcumentDB连接字符串,而不是从那里获取数据。

首先,您可以尝试直接在MVC控制器中访问HttpContext.Request.Host并查询SQL数据库以获取基于子域名的连接字符串。

其次,如果可能,您可以将您的应用程序发布为具有自己的子域的三个单独的网站,并在Web.config文件中存储和管理DocumentDB连接字符串。用户可以浏览站点并从不同的子域访问不同的DocumentDB。