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

时间:2011-03-11 21:58:32

标签: 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" %>

然后客户端将以(例如)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

经文

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配置的已接受组合是什么?

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

另见

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以使用IIS中的虚拟目录将两个应用程序指向同一个文件夹,这样您只有一个应用程序副本。如果您的型号和型号更加容易。控制器代码与您的代码分开以生成视图。

答案 2 :(得分:1)

您应该通过MS Web Platform Installer

查看此工具

网址重写2.0

应用程序请求路由2.5