如何根据域名加载不同的布局页面?

时间:2018-09-12 12:54:45

标签: c# .net asp.net-core .net-core asp.net-core-2.0

我有一个.NET Core项目,其中基于子域,我将加载不同的Layout.cshtml页面。

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

如何获取子域?在哪里

2 个答案:

答案 0 :(得分:3)

您可以简单地在视图中添加自己的逻辑,也可以根据自己的条件在全局_ViewStart.cshtml中选择正确的布局。我过去所做的是添加一个ViewData属性,因此我的_ViewStart.cshtml如下所示:

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

因此,我只需要在MVC管道内的某个地方设置ViewData["_OverwriteLayout"]值。我个人是在ResultFilter内完成此操作的,因此当返回非视图结果时,逻辑不会运行。

例如,可能看起来像这样:

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

        return next();
    }
}

答案 1 :(得分:1)

您可以创建多个布局,并可以从其ViewStart.cshtml文件中调用它们。 例如,如果您在另一个布局中的另一个文件夹中有另一个_Layout2.cshtml,则在此文件夹中创建具有此路径的_ViewStart.cshtml文件

@{
  Layout="~/Views/Shared/[your folder]_Layout2.cshtml"
 }