Я пытаюсь реализовать маршрутизацию URL ASP.NET с помощью System.Web.Routing. И это, похоже, отлично работает на моем локальном хосте, но когда я иду в прямом эфире, я получаю ошибку IIS 7 404 (файл не найден). FYI хостинг использует Windows Server 2008 IIS7.
Я думаю, что это имеет некоторое значение при обработке механизма маршрутизации. Но я не могу понять, что именно происходит. Ниже приведены настройки и изменения, которые я сделал до сих пор, чтобы заставить его работать, и чтобы дать мне кредит, он отлично работает локально.
Настройки Web.Config
И затем у меня есть раздел system.webserver, который имеет следующую разметку
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web.Routing, Version=3.5.0.0,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35" />
</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>
Затем в разделе Application_Start я определил один маршрут следующим образом:
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.Add(
"MyRoute",
new Route("ProductDetail/{ProductId}/{ProductName}",
new MyRouteHandler("~/ProductDetail.aspx")));
}
Наконец, MyRouteHandler выглядит следующим образом:
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var display = (Page)BuildManager.CreateInstanceFromVirtualPath(
_virtualPath, typeof(Page));
HttpContext.Current.Items["ProductId"] = requestContext.RouteData.Values["Product"];
return display;
}
И на маршрутизированной странице я собираю идентификатор продукта следующим образом
ProductId = (int)HttpContext.Current.Items["Product"];
И это конец моего беспорядка. И это прекрасно работает на местном уровне. Я пробовал это некоторое время, но до сих пор не удалось.
ЛЮБАЯ ПОМОЩЬ БУДЕТ ГЛУБОКО ПРИЗНАНА.
Спасибо...