IIS/ASP/ASP.net:如何构建Web站点以公开移动版本

Ian*_*oyd 5 asp.net iis mobile mobile-website

假装我有一个现有的网站,例如:

www.stackoverflow.com

我现在想公开这个网站的移动版本:

m.stackoverflow.com

IIS及其主机头名称解析通常需要创建两个网站:

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

除了现在我在IIS中有两个网站.这意味着我必须在它们之间复制代码/文件.我不需要(也不想)复制两个网站之间的所有"模型"和"控制器"代码.我宁愿有一个公开移动版本的网站.

可以default页面m.stackoverflow.com简单地执行重定向到"真实"网站上的移动登录页面:

m.stackoverflow.com\default.asp:

 <% Response.Redirect "www.stackoverflow.com/mobile" %>
Run Code Online (Sandbox Code Playgroud)

然后客户端将以(例如)结束www.stackoverflow.com/mobile/default.aspx.

这不是我想要的.我希望它出现在他们正在访问的浏览器中m.stackoverflow.com.

所以我在IIS中可以做的是为一个 IIS网站提供两个主机头名称:

  • stackoverflow.com
  • m.stackoverflow.com

并检查http-request HOST标头:

GET https://stackoverflow.com/questions/ViewQuestion.aspx?qid=3623844
Host: stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

经文

GET https://stackoverflow.com/questions/ViewQuestion.aspx?qid=3623844
Host: m.stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

除了现在我的所有网站页面必须首先检查Host属性,然后根据它找到的更改渲染行为.这在经典ASP中运行得有点好:

ViewQuestion.asp

<% Dim mobileVersion 

    ...

If MobileVersion Then
%>
<html>
...
</html>
<% Else %>
<html>
...
</html>
<% End If %>
Run Code Online (Sandbox Code Playgroud)

但是在一个页面中制作双视图非常痛苦.我更喜欢有一个ViewQuestion视图,专门用于显示常规或移动视图.


我也知道我不能使用media=handheld媒体类型.

  • 我不仅不希望将"完整"页面内容发送到移动客户端(浪费带宽和下载速度),然后基于CSS隐藏内容
  • 并非所有掌上电脑(例如iPhone)都尊重media=handheld媒体类型

那么,最能支持网站移动版本的源代码和IIS配置的可接受组合是什么?

编辑一:删除了对MVC的标题引用.不希望人们假设使用某些特定的MVC框架,因为我没有使用任何MVC框架.我正在使用ASP/ASP.net.

也可以看看

Cod*_*ack 2

在 mvc 中,您可以通过覆盖视图引擎来提交移动视图。我们在大约 3 天的时间里创建了我们网站的 iPhone 版本。

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