Как добавить косую черту, добавленную к маршрутам страницы? - PullRequest
2 голосов
/ 11 ноября 2010

Это почти идентичная проблема, с которой я сталкиваюсь в этом запросе, хотя у меня есть сценарий Web Forms (использующий маршрутизацию в .NET 4), а не MVC.

Добавить косую черту в конце каждого URL?

Решение, о котором кто-то упоминает, к сожалению, предоставлено только наполовину, поскольку ссылка на полное решение не работает.

В настоящее время любая косая черта с маршрутов моей страницы удаляется, когда я получаю URL-адрес маршрута. Это особенно проблематично, когда я хочу использовать следующий тип встроенного синтаксиса в моей веб-форме:

<a runat="server" href='<%$RouteUrl:RouteName=Posts %>'>

Опять здесь удаляется косая черта, несмотря на то, что она присутствует в моей таблице маршрутов.

Может ли кто-нибудь помочь обеспечить чистое и эффективное решение этой проблемы? В идеале, как «почти полное» решение, представленное в другом потоке переполнения стека, который я описал выше?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2010

Я нашел решение моего первоначального вопроса. Я нашел следующую статью, которая описывает, как вы можете убедиться, что все ваши URL-адреса указаны в нижнем регистре, поэтому я просто использовал этот пример кода, но добавил косую черту, где он выполняет ToLowerInvariant ().

Итак, мои 2 вспомогательных класса теперь выглядят так:

public class LowercaseRoute : System.Web.Routing.Route
{
    public LowercaseRoute(string url, IRouteHandler routeHandler)
        : base(url, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler)
        : base(url, defaults, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler)
        : base(url, defaults, constraints, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler)
        : base(url, defaults, constraints, dataTokens, routeHandler) { }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        VirtualPathData path = base.GetVirtualPath(requestContext, values);

        if (path != null)
            path.VirtualPath = path.VirtualPath.ToLowerInvariant() + "/";

        return path;
    }
}

public static class RouteCollectionExtensions
{
    public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults)
    {
        routes.MapRouteLowercase(name, url, defaults, null);
    }

    public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints)
    {
        if (routes == null)
            throw new ArgumentNullException("routes");

        if (url == null)
            throw new ArgumentNullException("url");

        var route = new LowercaseRoute(url, new MvcRouteHandler())
        {
            Defaults = new RouteValueDictionary(defaults),
            Constraints = new RouteValueDictionary(constraints)
        };

        if (String.IsNullOrEmpty(name))
            routes.Add(route);
        else
            routes.Add(name, route);
    }
}

В моем global.asax вместо использования «MapRoute» в моей процедуре RegisterRoutes вместо этого я вызываю новый метод MapRouteLowercase (передавая те же параметры), например,

routes.MapRouteLowercase("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Оригинальную статью, из которой я получил этот код, можно найти здесь:

http://goneale.com/2008/12/19/lowercase-route-urls-in-aspnet-mvc/

0 голосов
/ 08 июля 2013

, чтобы сгенерированные URL-адреса всегда были строчными, и в конце косой черты я добавляю библиотеку TidyRouting к своему решению, а затем просто заменяю метод MapRoute новым MapTidyRoute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...