在VirtualPathProvider MVC5中解析租户ID

时间:2016-10-28 07:31:14

标签: c# asp.net-mvc-5 multi-tenant virtualpathprovider

我正在编写基于多租户的应用程序,我想从url(租户)的存储库加载自定义视图。

我在浏览器中输入https://corporate.myapp.local/,但在FileExists方法HttpContext.Current.Request.Url中给我http://127.0.0.1/它不会告诉我这是哪个域,所以我可以获取域名和文件解决tenantid

public class ViewPathProvider : VirtualPathProvider, ICustomVirtualPathProvider
    {
        VirtualPathProvider ICustomVirtualPathProvider.Instance => this;

        private readonly ILogger _logger;
        private readonly IThemeService _themeService;
        private readonly ISellutionSession _sellutionSession;

        public ViewPathProvider(ILogger logger, IThemeService themeService, ISellutionSession sellutionSession)
        {
            _logger = logger;
            _themeService = themeService;
            _sellutionSession = sellutionSession;
        }

        public override bool FileExists(string virtualPath)
        {

            _logger.Log($"CurrentCompanyId: {_sellutionSession.GetCurrentCompany(HttpContext.Current.Request.Url).CompanyId}");

            var isViewExist = Pages.IsExistByVirtualPath(virtualPath);
            return isViewExist || Previous.FileExists(virtualPath);
        }

1 个答案:

答案 0 :(得分:0)

您需要设置您的开发环境才能接受子域, 这可以通过编辑机器上的applicationHost.config文件和主机文件来完成。

需要更改IIS Express运行开发环境的方式。

在Visual Studio 2015中,右键单击解决方案文件。

在文件资源管理器中选择'打开文件夹'

转到包含文件夹并查找.vs文件夹。

在里面,会有一个包含applicationhost.config文件的配置文件夹。

在您喜欢的文本编辑器中打开它(我使用Notepad ++)

在Configuration / system.applicationHost / Sites下,您应该看到您的站点与端口和localhost绑定。

<binding protocol="http" bindingInformation="*:38254:localhost" />

复制此行并将您的子域添加到此绑定。

<binding protocol="http" bindingInformation="*:38254:m.localhost" />

保存此文件并重新加载项目。

主机文件 需要前往我们的Hosts文件来修改它。

在文件资源管理器中转到C:\ Windows \ System32 \ Drivers \ Etc。 打开HOSTS文件(没有扩展名) 在hosts文件的底部,添加以下两行。

127.0.0.1    localhost
127.0.0.2    m.localhost

保存文件。

您需要授予Visual Studio 2015管理权限才能使用子域。

现在我们可以运行我们的Visual Studio,看看我们的子域名实际上是run.st:3892

这是一个link来帮助你。