Как загрузить разные страницы макета в зависимости от имени домена? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть проект .NET Core, в котором на основе субдомена я буду загружать разные страницы Layout.cshtml.

На основе субдомена в базе данных должен быть выполнен запрос, который вернет код.На основе этого кода в моем ViewStart.cshtml я буду загружать различные макеты.

Как я могу получить поддомен?И где?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы можете просто добавить свою собственную логику в свои представления или глобальную _ViewStart.cshtml, которая выбирает правильный макет в зависимости от ваших собственных критериев.В прошлом я добавил свойство ViewData, поэтому мой _ViewStart.cshtml выглядит следующим образом:

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

Так что мне просто нужно установить значение ViewData["_OverwriteLayout"] где-нибудь внутри конвейера MVC.Я лично сделал это в 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();
    }
}
0 голосов
/ 12 сентября 2018

Вы можете создать несколько макетов и вызывать их из их файла ViewStart.cshtml.Например, если у вас есть второй файл _Layout2.cshtml в другой папке, отличной от другого макета, вы создаете в этой папке файл _ViewStart.cshtml с этим путем

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