IIS / ASP / ASP.net: Как структурировать сайт для выставления мобильной версии - PullRequest
5 голосов
/ 12 марта 2011

Представьте, что у меня есть существующий веб-сайт, например:

www.stackoverflow.com

Теперь я хочу показать мобильную версию этого веб-сайта:

m.stackoverflow.com

IIS с разрешением имени заголовка узла обычно требует создания двух веб-сайтов.:

  • www.stackoverflow.com
  • m.stackoverflow.com

За исключением того, что сейчас у меня есть два веб-сайта в IIS.Это означает, что я должен дублировать код / ​​файлы между ними.мне не нужно (и не хочу) дублировать весь код "model" и "controller" между двумя веб-сайтами.Я бы предпочел иметь один веб-сайт, который предоставляет мобильную версию.

i может иметь страницу default в m.stackoverflow.com, просто выполнить перенаправление на мобильную целевую страницу на"настоящий" веб-сайт:

m.stackoverflow.com\default.asp:

 <% Response.Redirect "www.stackoverflow.com/mobile" %>

Тогда клиент в итоге (например) www.stackoverflow.com/mobile/default.aspx.

Это не 'т то, что я хочу.я хочу чтобы браузер увидел, что они посещают m.stackoverflow.com.

Итак, что я мог сделать в IIS - это иметь два имени заголовка узла для one Веб-сайт IIS:

  • stackoverflow.com
  • m.stackoverflow.com

и проверка http-запроса HOST header:

GET https://stackoverflow.com/questions/ViewQuestion.aspx?qid=3623844
Host: stackoverflow.com

verses

GET https://stackoverflow.com/questions/ViewQuestion.aspx?qid=3623844
Host: m.stackoverflow.com

За исключением того, что теперь все мои страницы моего веб-сайта должны сначала проверить атрибут Host, а затем изменить поведение рендеринга в зависимости от того, что он находит,Это хорошо работает в классическом ASP:

ViewQuestion.asp

<% Dim mobileVersion 

    ...

If MobileVersion Then
%>
<html>
...
</html>
<% Else %>
<html>
...
</html>
<% End If %>

Но создание двойного просмотра на одной странице очень болезненно.я бы предпочел бы иметь ViewQuestion представление, предназначенное для показа обычного или мобильного представления.


я также знаю, что не могу использовать media=handheldтип носителя.

  • я не только не хочу, чтобы отправлял "полный" контент страницы на мобильные клиенты (тратя их пропускную способность и скорость загрузки), а затем скрывал контент на основе CSS
  • не все карманные компьютеры (например, iPhone) соответствуют типу media=handheld мультимедиа

Итак, какова принятая комбинация исходного кода и конфигурации IIS, котораялучше всего поддерживает мобильные версии веб-сайта?

Edit One: Удалена заголовочная ссылка на MVC.Не хочу, чтобы люди предполагали использование какой-то конкретной инфраструктуры MVC, поскольку я не использую какую-либо инфраструктуру MVC.Я использую ASP / ASP.net.

См. также

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

В mvc вы можете просто отправить мобильные представления, переопределив механизм просмотра.Мы создали версию нашего сайта для iPhone примерно за 3 дня.

http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx

1 голос
/ 01 июня 2011

Вы должны проверить этот инструмент, доступный через MS Установщик веб-платформы

Перезапись URL 2.0

Маршрутизация запросов приложений 2.5

1 голос
/ 01 июня 2011

Вы можете использовать виртуальные каталоги в IIS для указания обоих приложений на одни и те же папки, чтобы у вас была только одна копия приложения.Это даже проще, если код вашей модели и контроллера находится отдельно от кода для создания представления.

...