условная маршрутизация URL с помощью веб-форм asp.net 4 - PullRequest
2 голосов
/ 03 сентября 2011

Я хочу разместить на своем сайте мобильную и веб-версию страниц без какого-либо перенаправления, чтобы, если посетитель просматривал их с ПК, он видел веб-версию и наоборот.

Я могу выполнять некоторые медиа-запросы и сокращать содержимое на странице, но это не идеально.

Я знаю, что могу сделать это с помощью asp.net mvc, но проект уже наполовину завершен, и у меня нет времени переписать его.

Я думал об использовании условной маршрутизации, но, поскольку маршруты регистрировались при запуске приложения, это не выглядело возможным. Есть ли в любом случае использование условного гниения?

Я тоже открыт для предложений.

1 Ответ

0 голосов
/ 03 сентября 2011

Это не решение 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() }
);
...