ASP.Net MVC2: не удается заставить RewritePath работать с целью * .aspx - PullRequest
0 голосов
/ 26 января 2012

ASP.Net Магия маршрутизации MVC до сих пор время от времени удивляет меня, особенно когда речь идет об обработке ошибок и перенаправлении.

Почему http://foobar.com/Home/Index работает, но http://foobar.com/Home/Index.aspx генерирует 404?

Это важно для меня, потому что я хочу сделать редкий редирект:

protected void Application_BeginRequest(object sender, EventArgs e) {
    if (some condition) {
        HttpContext.Current.RewritePath("Home/Index.aspx");
    }
}

В настоящий момент этот фрагмент не работает.Если я оставляю суффикс .aspx, получаю 404, если я его удаляю, я получаю каскад вызовов в Application_BeginRequest.

Спасибо, как всегда, Даффи

1 Ответ

0 голосов
/ 26 января 2012

ASP.NET MVC отображает URL-адреса в соответствии с правилами шаблона URL, определенными в его маршрутизации.Только если не существует правила маршрутизации, соответствующего данному URL-адресу, MVC будет считать, что запрошенный URL-адрес относится к физическому файлу (и только если эта функция также включена).

При этом, если у вас нетшаблон маршрутизации (или маршрут, если хотите), который соответствует «home / index.aspx», тогда не определено никакого обработчика для работы с этим URL, и MVC вернется к предположению, что запрашивается физический файл.Поскольку по этому пути нет физического файла, он возвращает 404 - действительно, этого файла не существует: я знаю, что он у вас есть, но он находится в другом месте (/views/home/index.aspx).

Однако, даже если вы запрашиваете правильный путь (например, «/views/home/index.aspx»), вы все равно получите 404, потому что в папке «views» есть файл web.config справило, которое запрещает доступ ко всем файлам таким способом (к ним можно получить доступ только изнутри контроллеров, в основном).

Итак, если вам нужно перенести запрос на другой контроллер / действие, есть несколько способовсделать это.Посмотрите, помогут ли вам эти потоки:

Как смоделировать Server.Transfer в ASP.NET MVC?

Как использовать метод Server.Transfer вasp.net MVC?

О, и если "some_condition" - это просто сопоставление URL-пути, то вам, вероятно, следует сделать это на уровне маршрутизации.

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