ASP.NET 4.0 URL-адрес маршрутизации HTTP ошибка 404.0 - не найден - PullRequest
12 голосов
/ 19 августа 2010

Я реализовал URL-маршрутизацию в ASP.NET 4.0, используя следующий маршрут.

routes.MapPageRoute(
   "NewsDetails",               // Route name
   "news/{i}/{*n}",  // Route URL
   "~/newsdetails.aspx"      // Web page to handle route
    );

, который дает мне URL-адрес типа

http://www.mysie.com/news/1/this-is-test-news

, и это работает в моем локальном штрафе.

Но когда я загрузил его на сервер, он выдает ...

Server Error

404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, 
or is temporarily unavailable.

Если я попытаюсь http://www.mysie.com/news/1/this-is-test-news.aspx, то отобразится страница.

Есть кто-нибудьу меня такая же проблема?

Как настроить URL http://www.mysie.com/news/1/this-is-test-news для работы на Windows Server 2008?

Ответы [ 3 ]

33 голосов
/ 23 августа 2010

Чтобы включить маршрутизацию ASP.Net 4.0 по умолчанию с IIS 7.5:

  1. Убедитесь, что установлена ​​функция перенаправления HTTP Это можно сделать -> Панель управления ->Progams -> Отключить функции Windows -> Службы всемирной паутины -> Общие функции HTTP -> Перенаправление HTTP
  2. Измените web.config с помощью кода ниже

<system.webServer>   
    <modules runAllManagedModulesForAllRequests="true">    
        <remove name="UrlRoutingModule"/>
        <add name="UrlRoutingModule" 
             type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
    <handlers>
        <add name="UrlRoutingHandler" 
             preCondition="integratedMode" 
             verb="*" 
             path="UrlRouting.axd" 
             type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </handlers>
</system.webServer>

3.Создайте маршруты в global.asax файле

Примечание. Необходимо установить для пула приложений значение пул приложений Asp.net 4.0 , поскольку маршрутизация не работает с Asp.net 4.0 Classic Application pool.

Надеюсь, это поможет.

1 голос
/ 17 марта 2012

Мое решение, после попытки ВСЕГО:

Плохое развертывание, старый PrecompiledApp.config зависал вокруг моего местоположения развертывания и заставлял все работать не так.

Мои последние настройки, которые сработали:

  • IIS 7.5, Win2k8r2 x64,
  • Пул приложений в интегрированном режиме
  • Ничего не меняется в файле web.config - это означает отсутствие специальных обработчиков для маршрутизации. Вот мой снимок разделов, ссылки на многие другие сообщения. Я использую FluorineFX, поэтому мне добавили этот обработчик, но другие мне не нужны:

    <system.web>
      <compilation debug="true" targetFramework="4.0" />
      <authentication mode="None"/>
    
      <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
      <httpRuntime requestPathInvalidCharacters=""/>
    
      <httpModules>
        <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
      </httpModules>
    </system.web>
      <system.webServer>
        <!-- Modules for IIS 7.0 Integrated mode -->
        <modules>
          <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" />
        </modules>
    
        <!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration -->
        <validation validateIntegratedModeConfiguration="false" />
      </system.webServer>
    
  • Global.ashx: (только метод любой заметки)

    void Application_Start(object sender, EventArgs e) {
        // Register routes...
        System.Web.Routing.Route echoRoute = new System.Web.Routing.Route(
              "{*message}",
            //the default value for the message
              new System.Web.Routing.RouteValueDictionary() { { "message", "" } },
            //any regular expression restrictions (i.e. @"[^\d].{4,}" means "does not start with number, at least 4 chars
              new System.Web.Routing.RouteValueDictionary() { { "message", @"[^\d].{4,}" } },
              new TestRoute.Handlers.PassthroughRouteHandler()
           );
    
        System.Web.Routing.RouteTable.Routes.Add(echoRoute);
    }
    
  • PassthroughRouteHandler.cs - это обеспечило автоматическое преобразование из http://andrew.arace.info/stackoverflow в http://andrew.arace.info/#stackoverflow, которое затем будет обрабатываться по умолчанию.

    public class PassthroughRouteHandler : IRouteHandler {
    
        public IHttpHandler GetHttpHandler(RequestContext requestContext) {
            HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"];
            requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true);
            return null;
        }
    }
    
1 голос
/ 07 ноября 2011

Я прочитал все ваши рецепты, но мой веб-сайт ( ASP.NET 4.0 + VS2010 + Cassini ) по-прежнему не маршрутизация правильно.

The Виртуальный путь для моего сайта было "CompanyName.ApplicationName.Web".Я изменил этот виртуальный на «MyApplicationName» и вуаля!

Измените конфигурацию виртуального пути Cassini:

  • Виртуальный путь Cassini -> Ctrl + W, P или;
  • Щелкните правой кнопкой мыши на веб-сайте и в «окне свойств».
...