首页 > 解决方案 > 如何根据域名加载不同的Layout页面?

问题描述

我有一个 .NET Core 项目,我将根据子域加载不同的 Layout.cshtml 页面。

根据子域,应在数据库中进行查询,该查询将返回一个代码。基于我的 ViewStart.cshtml 中的这段代码,我将加载不同的布局。

如何获得子域?在哪里?

标签: c#.netasp.net-core.net-coreasp.net-core-2.0

解决方案


您可以简单地将您自己的逻辑添加到您的视图或_ViewStart.cshtml根据您自己的标准选择正确布局的全局中。我过去所做的是添加一个ViewData属性,所以我的_ViewStart.cshtml样子是这样的:

@{
  Layout = (string)ViewData["_OverwriteLayout"] ?? "_DefaultLayout";
}

所以我只需要ViewData["_OverwriteLayout"]在 MVC 管道内的某处设置值。我个人在 aResultFilter中这样做了,因此当返回非视图结果时逻辑不会运行。

例如,这可能如下所示:

public class CustomLayoutResultFilter : IAsyncResultFilter
{
    public Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        if (context.Result is ViewResult viewResult)
        {
            if (context.HttpContext.Request.Host.ToString() == "test.example.com")
                viewResult.ViewData["_OverwriteLayout"] = "_TestLayout";
        }

        return next();
    }
}

推荐阅读