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

kep*_*hax 3 .net c# .net-core asp.net-core asp.net-core-2.0

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

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

如何获得子域名?在哪里

pok*_*oke 5

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

@{
  Layout = (string)ViewData["_OverwriteLayout"] ?? "_DefaultLayout";
}
Run Code Online (Sandbox Code Playgroud)

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

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)