使用asp.net 4 webforms进行条件URL路由

时间:2011-09-03 16:12:19

标签: asp.net routing webforms conditional

我想在我的网站上为移动和网页版本的服务器提供服务而不需要任何重定向,这样如果访问者使用PC浏览它们,他们就会看到网络版,反之亦然。

我可以进行一些媒体查询并减少页面上的内容,但这并不理想。

我知道我可以用asp.net mvc来做,但是,项目已经完成了一半,我没有时间重写它。

我考虑过使用条件路由,但是当应用程序启动时路由注册它看起来不可能。无论如何使用条件旋转?

我也愿意接受建议。

1 个答案:

答案 0 :(得分:0)

这不是MVC解决方案,但我知道您可以使用IIS7重写模块执行此操作。

<rewrite>
    <rules>
        <rule name="Mobile" stopProcessing="true">
            <match url="^(.*)$" />
            <conditions logicalGrouping="MatchAny">
                <add input="{USER_AGENT}" pattern="iPhone" />
            </conditions>
            <action type="Rewrite" url="Mobile/{R:1}" />
        </rule>
    </rules>
</rewrite>

您当然也可以使用MVC中的自定义条件路由来执行此操作。

public class MobileConstraint : IRouteConstraint
{
    public MobileConstraint() { }

    public bool Match(HttpContextBase httpContext, Route route, 
                                   string parameterName, 
                                   RouteValueDictionary values, 
                                   RouteDirection routeDirection)
    {
        // add null checking etc
        return httpContext.Request.UserAgent.Contains("iPhone")
    }
}

context.MapRoute(
    "mobile",
    "Mobile/{controller}/{action}/{id}",
    new { action = "Index", controller = "Home", id = UrlParameter.Optional },
    new { controller = new MobileConstraint() }
);