Próbuję zaimplementować routing adresu URL ASP.NET przy użyciu System.Web.Routing. Wydaje się, że działa to dobrze na moim lokalnym hoście, ale kiedy jestem na żywo, otrzymuję błąd 404 w IIS 7 (nie znaleziono pliku). Dla celów FYI hosting korzysta z Windows Server 2008 IIS7.Łamanie mojej głowy, aby uzyskać routing adresu URL w środowisku hostingowym IIS 7: ASP.NET
Myślę, że to robi jakąś różnicę w posługiwaniu się mechanizmem routingu. Ale nie jestem w stanie dowiedzieć się, co dokładnie się dzieje. Poniżej znajdują się ustawienia i zmiany, które wprowadziłem do tej pory, aby działały i przyznam sobie trochę kredytu. Działa to absolutnie dobrze lokalnie.
Ustawienia web.config
A potem mam sekcji system.webServer który ma następujące znaczników
<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>
następnie w sekcji Application_Start mam zdefiniowaną jako jedną trasą to:
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")));
}
Wreszcie MyRouteHandler wygląda następująco:
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var display = (Page)BuildManager.CreateInstanceFromVirtualPath(
_virtualPath, typeof(Page));
HttpContext.Current.Items["ProductId"] = requestContext.RouteData.Values["Product"];
return display;
}
A na kierowane strony jestem chwytając identyfikator produktu następująco
ProductId = (int)HttpContext.Current.Items["Product"];
I to jest koniec mojego bałaganu. Działa to dobrze na miejscu. Próbowałem tego przez jakiś czas, ale nie udało mi się tak daleko.
WSZELKIE POMOCY ZOSTANĄ GŁĘBOKIE UZGODNIONE.
Dzięki ...
czy wprowadzono jakieś zasady przepisywania? – Rony