Задать вопрос
Morpheus_God
@Morpheus_God

Как реализовать «отдачу» нужной версии сайта?

Добрый день.
У меня есть небольшой тестовый сайт, верстка мобилки и верстка под десктоп, но как в net core реализовать это все?
Что бы web api к примеру увидев user agent мобильного устройства отдавала верстку под мобилку ну и если десктоп отдавала сборку сайта под десктоп.
  • Вопрос задан
  • 203 просмотра
Подписаться 3 Простой 10 комментариев
Пригласить эксперта
Ответы на вопрос 3
NeiroNx
@NeiroNx
Программист
Речь идет про IIS как я понял.
Создай правило переопределения адресов в условиях добавь {HTTP_user-agent} по шаблону .*Mobile.* (все мобильные агенты должны содержать слово Mobile)
<rule name="test" enabled="false">
 <match url="(.*)" />  
  <conditions>
   <add input="{HTTP_user-agent}" pattern=".*Mobile.*" />
  </conditions>
  <action type="Redirect" url="/mobile.html" />
</rule>
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Ну логика для обоих версий все таки будет одна
1. Делать на базе CSS все, тот же bootstrap позволяет делать и мобильную версию одновременно.
2. Так как бизнес-логика остается, делаем такой фокус
https://docs.microsoft.com/ru-ru/dotnet/api/micros...
public class ViewLocationExpander: IViewLocationExpander {

    /// <summary>
    /// Used to specify the locations that the view engine should search to 
    /// locate views.
    /// </summary>
    /// <param name="context"></param>
    /// <param name="viewLocations"></param>
    /// <returns></returns>
    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) {
        //{2} is area, {1} is controller,{0} is the action
        string[] locations = new string[] { "/Views/{2}/{1}/{0}.cshtml"};
        return locations.Union(viewLocations);          //Add mvc default locations after ours
    }


    public void PopulateValues(ViewLocationExpanderContext context) {
        context.Values["customviewlocation"] = nameof(ViewLocationExpander);
    }
}


services.Configure<RazorViewEngineOptions>(options => {
        options.ViewLocationExpanders.Add(new ViewLocationExpander());
    });


UPD: Все таки, результаты кэшируются, при работе, ну вариант 2, написание собственного RazorViewEngine
https://github.com/dotnet/aspnetcore/blob/main/src...

3. использовать Areas, пишем middleware который при мобильном клиенте перекидывает нас на мобильную зону. но 2 раза писать все контроллеры, плюс можно разные версии сделать.
Ответ написан
Комментировать
@KislyFan
инженер, связист и просто любитель выпить
Воспользуйся решением Роман или определи свое собственное middle-ware, где будет определяться тип браузера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы