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

问题描述 投票:2回答:2

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

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

我怎样才能获得子域名?在哪里?

c# .net asp.net-core .net-core asp.net-core-2.0
2个回答
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
投票

您可以创建多个布局,并可以从其ViewStart.cshtml文件中调用它们。例如,如果你在另一个文件夹的另一个文件夹中有第二个_Layout2.cshtml,那么你在这个文件夹中创建一个带有这个路径的_ViewStart.cshtml文件

@{
  Layout="~/Views/Shared/[your folder]_Layout2.cshtml"
 }
© www.soinside.com 2019 - 2024. All rights reserved.