Ошибка URL-адреса URL-адреса ASP.NET 4.0 Ошибка 404.0 - не найдено
Я реализовал маршрутизацию 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
и это работает в моем localhost fine.
Но когда я загрузил его на сервер, он дает...
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 2008?
Ответы
Ответ 1
Чтобы включить маршрутизацию по умолчанию ASP.Net 4.0 с помощью IIS 7.5:
- Убедитесь, что вы установили функцию перенаправления HTTP
Это можно сделать → Панель управления → Прогматы → Отключить функции Windows → Всемирные веб-службы → Общие функции HTTP → Перенаправление HTTP
- Измените
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.
>
Надеюсь, это поможет.
Ответ 2
Я прочитал все ваши рецепты, но мой веб-сайт (ASP.NET 4.0 + VS2010 + Cassini) по-прежнему не был маршрутизации.
Виртуальный путь для моего сайта был "CompanyName.ApplicationName.Web". Я изменил этот виртуальный на "MyApplicationName" и voila!
Измените конфигурацию виртуального пути Cassini:
- Виртуальный путь Кассини → Ctrl + W, P или;
- Щелкните правой кнопкой мыши веб-сайт и "окно свойств".
Ответ 3
Мое решение, попробовав ВСЕ:
Плохое развертывание, старый 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, который затем будет обрабатываться по умолчанию .aspx:
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;
}
}