c# - 如何根据域名加载不同的Layout页面?
问题描述
我有一个 .NET Core 项目,我将根据子域加载不同的 Layout.cshtml 页面。
根据子域,应在数据库中进行查询,该查询将返回一个代码。基于我的 ViewStart.cshtml 中的这段代码,我将加载不同的布局。
如何获得子域?在哪里?
解决方案
您可以简单地将您自己的逻辑添加到您的视图或_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();
}
}
推荐阅读
- php - 从数组中排除 NULL 和数值
- node.js - Amazon KMS - 预期用途
- docker - Docker 容器中的 dotnet ef 数据库更新失败并出现错误权限
- php - 函数中的 PHP curl 不返回 antyhing
- image - Webpack 不使用绝对路径加载本地图像
- node.js - 使用 Nginx 作为 AWS EC2 上的代理服务器,使用 socket.io 运行 NodeJs 应用程序
- ios - IOS 11.4.1 上的 AVFoundation、AVAudioSessionRouteChange 行为不正确
- php - Laravel:如何在子进程中通过 Eloquent 更新 MySQL?
- windows - 通过 Electron 访问当前高亮文本
- php - 1 个模型中的 2 个查询 (CodeIgniter)