ASP.Net Core Blazor:如何根据标头值加载不同的 _Host.cshtml 文件

Fra*_*r23 7 c# asp.net multi-tenant blazor blazor-server-side

我想_Host.cshtml根据请求中的标头在 ASP.NET Core Blazor 项目(服务器端 Blazor)中加载一个文件。

例如:

一个客户端连接example.com并被重定向到一个_Host.cshtml特定于租户 A的文件。另一个客户端连接test.com并被重定向到一个_Host.cshtml特定于租户 B的文件。

_Host.cshtml文件看起来像这样:

@page

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <meta charset="utf-8" />
    <title>ProjectName</title>
    <link rel="icon" type="image/png" sizes="32x32" href="images/tenantA/favicons/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="images/tenantA/favicons/favicon-16x16.png">
</head>
<body class="something">
    <app>
        @(await Html.RenderComponentAsync<App>(RenderMode.Server))
    </app>

    <script src="_framework/blazor.server.js"></script>
    <link href="css/tenantA/site.css" rel="stylesheet" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在该_Host.cshtml文件中,tenantA需要根据上述租户 URL 中的上述租户选择来设置引用。这是可能的,如果是,如何实现?

小智 7

这是一种可能的解决方案,

在_Host.cshtml

您可以通过动态字符串逻辑重定向到任何 _HostX.cshtml

@page "/"
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@if(Request.Query["test"].FirstOrDefault()=="1")
{
    Html.RenderPartial("_Host2.cshtml",null,ViewData);
    return;
}

<!DOCTYPE html>
<html lang="en">
<head>
....
...
..
.
Run Code Online (Sandbox Code Playgroud)

这是经过测试的。

您可以修改条件语句以匹配您的情况。