Как отложить до «по умолчанию» HttpHandler для ASP.NET MVC после обработки потенциального переопределения? - PullRequest
2 голосов
/ 26 мая 2009

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

Изучив множество примеров, блогов, статей и т. Д. По реализации настраиваемой маршрутизации для ASP.NET MVC, я все еще не нашел варианта использования, который бы подходил моему сценарию. У нас есть существующая реализация для ASP.NET, которая работает нормально, но мы возвращаем «стандартный» обработчик, когда никакие переопределения не совпадают. Методика, которую мы в настоящее время используем, очень похожа на описанную в этой статье MSDN: http://msdn.microsoft.com/en-us/library/ms972974.aspx#urlrewriting_topic5, в которой говорится, что «фабрика обработчиков HTTP может возвращать обработчик HTTP, возвращаемый функцией GetCompiledPageInstance класса System.Web.UI.PageParser () (это тот же метод, с помощью которого работает встроенная фабрика обработчиков HTTP веб-страниц ASP.NET, PageHandlerFactory.) ".

То, что я пытаюсь выяснить: как я могу сначала посмотреть на входящий запрос, а затем передать его в маршрутизацию MVC, если текущий запрос не соответствует ни одному из динамически настроенных (через таблицу данных ) значения?

Ответы [ 2 ]

2 голосов
/ 26 мая 2009

Вам необходимо:

  1. Не использовать стандартный метод расширения MapRoute в global.asax (это то, что устанавливает обработчик маршрута).
  2. Вместо этого напишите свой собственный подтип маршрута, , например .
1 голос
/ 26 мая 2009

Хотя я и объяснил Крэйгу, что мне больше не нужно переопределять сценарий (в пользу будущего, а не прошлого), я понял, что есть простое и достаточно чистое место, где это переопределение можно реализовать - в коде Default.aspx файл. Вот стандартный метод Page_Load:

    public void Page_Load(object sender, System.EventArgs e)
    {
        // Change the current path so that the Routing handler can correctly interpret
        // the request, then restore the original path so that the OutputCache module
        // can correctly process the response (if caching is enabled).

        string originalPath = Request.Path;
        HttpContext.Current.RewritePath(Request.ApplicationPath, false);
        IHttpHandler httpHandler = new MvcHttpHandler();
        httpHandler.ProcessRequest(HttpContext.Current);
        HttpContext.Current.RewritePath(originalPath, false);
    }

Как видите, было бы очень просто прикрепить перехватчик обработки URL перед обработчиком MVC. Это меняет стандартное поведение страницы по умолчанию и должно быть отражено в любом другом приложении MVC, которое вы хотите создать с помощью того же метода, но, похоже, оно будет работать.

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