ASP.NET MVC Маршрутизация и URL-адреса, похожие на Slug - PullRequest
1 голос
/ 23 февраля 2011

В настоящее время я использую пользовательский класс для преобразования путей в строчные варианты, который работает без заминки

Пример.~ / Services / Catering => ~ / services / catering

Мой вопрос: как мне заставить MVC правильно проанализировать URL-адрес, если я заменил Pascal Case на более слагоподобную настройку

* 1006?* Ex.~ / Services / FoodAndDrink => ~ / services / food-and-drink

Я генерирую URL-адреса в своем унаследованном классе Route, переопределяя функцию GetVirtualPath () для преобразования в нижний регистр и заменяя заглавные буквы наВариант с тире и строчными буквами.

Я предполагаю, что мне придется перехватить URL-адрес и просто удалить дефисы, прежде чем на самом деле произойдет маршрутизация, но я не уверен, где это происходит в цикле страницы MVC

1 Ответ

5 голосов
/ 23 февраля 2011

Разобрался.Вспомнил предыдущий проект, когда мне приходилось переписывать URL.Реализуйте метод Application_BeginRequest в файле Global.asax.cs (каким бы ни был класс), сделайте некоторую проверку, чтобы убедиться, что вы переписали правильные пути, а затем используйте метод Context.RewritePath ()

EDIT: Так как код был запрошен для ...

public class MvcApplication : System.Web.HttpApplication
{
    //---snip---

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var url = RewriteUrl(Request.Path);

        Context.RewritePath(url);
    }

    //---snip---

    private string RewriteUrl(string path)
    {
        if (!path.Contains("Content") && !path.Contains("Scripts"))
        {
            path = path.Replace("-", "");
        }

        return path;
    }
}
...