ASP.NET 3.5 Маршрутизация не обрабатывается / (корневой URL) - PullRequest
2 голосов
/ 08 мая 2009

Я использую новую функциональность маршрутизации в ASP.NET 3.5, чтобы действовать в качестве общего средства для запросов страниц на мой веб-сайт. Я зарегистрировал свой маршрут следующим образом в global.asax,

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {

        RegisterRoutes(RouteTable.Routes);

    }

    private void RegisterRoutes(RouteCollection Routes)
    {

        Route r = new Route("{*URL}", new MyRouteHandler());
        Routes.Add(r);

    }

</script>

Код работает абсолютно нормально для всех URL-адресов, кроме / (корневая страница). Если я перехожу на любой другой URL / бла / что-то / foo /, он работает нормально, и мой обработчик запускается как положено.

Как мне заставить его работать через корневую страницу? Я выполняю код через сборку Visual Studio 2008 на веб-сервере.

Ответы [ 2 ]

1 голос
/ 08 мая 2009

Cassini (встроенный веб-сервер Visual Studio) может иметь проблемы с маршрутизацией.

Цитата из Блог Дмитрия :

У Cassini возникла проблема с проектами ASP.NET, использующими маршрутизацию из-за возможности составления списка каталогов. Кассини ответит списком каталогов на любой запрос каталога, не передавая запрос в ASP.NET. В результате запросы Кассини будут перехватывать запросы на дружественные URL-адреса и никогда не достигнут ASP.NET.

Это обновление (v3.5.0.1) меняет логику: все запросы сначала идут в ASP.NET, затем Cassini перехватывает 404 ответа и, если запрос был для каталога, отвечает с перечислением каталога. Приложения, использующие дружественные URL / маршрутизацию, теперь лучше работают с Cassini.

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

0 голосов
/ 22 мая 2009

Я не уверен, что вы можете настроить таргетинг на рут с помощью web.routing.

Я предполагаю, что вы реализовали web.routing в приложении веб-форм. Если это так, вы все еще перехватываете свои корневые запросы на своей странице по умолчанию (т.е. Default.aspx), и в этом случае вы можете обработать запрос оттуда.

Мои реализации web.routing в прошлом предназначались для страницы ASPX в корневом каталоге, которую я также настроил как страницу по умолчанию. Если запрос попадает на эту страницу без какой-либо информации о маршрутизации, я предполагаю, что запрос относится к дому.

Если, однако, вы используете механизм веб-форм, но используете структуру папок в стиле MVC. Я бы предложил добавить страницы по умолчанию, которые перенаправляют соответствующим образом, или, возможно, захватить запрос в событии BeginRequest.

Rich

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