Frage

Ich versuche, ASP.NET URL zu implementieren Routing mit dem System.Web.Routing . Und dies scheint jedoch auf meinem localhost zu funktionieren, wenn ich online gehe Ich erhalte eine IIS 7 der 404-Fehler (Datei nicht gefunden). FYI das Hosting verwendet Windows Server 2008 IIS7.

Ich denke, das einen Unterschied macht den Routing-Mechanismus in der Handhabung. Aber ich bin nicht in der Lage, herauszufinden, was genau passiert. Im Folgenden sind die Einstellungen und Änderungen, die ich bisher gemacht habe, um es zu arbeiten und einige Kredite zu mir selbst zu geben, es lokal absolut in Ordnung funktioniert.

Web.Config-Einstellungen    
          

Und dann habe ich einen system.webServer Abschnitt, der das folgende Markup hat

<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>

Dann in dem Application_Start Abschnitt Ich habe eine Route wie folgt definiert:

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")));
}

Schließlich MyRouteHandler sieht wie folgt aus:

 public IHttpHandler GetHttpHandler(RequestContext requestContext)
 {
     var display = (Page)BuildManager.CreateInstanceFromVirtualPath(
                     _virtualPath, typeof(Page));
     HttpContext.Current.Items["ProductId"] = requestContext.RouteData.Values["Product"]; 
     return display;
 }

Und auf der Seite geroutet ich die Produkt-ID bin Grabbing wie folgt

ProductId = (int)HttpContext.Current.Items["Product"];

Und das ist das Ende meiner Verwirrung. Und das funktioniert lokal in Ordnung. Ich habe dies für eine Weile versucht, aber nicht so weit gelungen ist.

Jede Hilfe wird sehr geschätzt werden.

Danke ...

War es hilfreich?

Lösung

Nicht sicher, ob Sie in der Lage waren, um herauszufinden, was das Problem war ... aber wenn Sie immer noch nach einer Lösung suchen, dann können Sie die folgende versuchen. Ich hatte die gleiche Situation vor einiger Zeit Gesicht und bekam es für die Verwendung von Rewrite-Regeln in Web Config arbeiten Sie keinen Routing-Mechanismus benötigen. Also zunächst würde ich empfehlen Ihnen, alle Routing zu entfernen Setzen Sie haben können und den Code aus der Datei Global.asax zu.

Dann im Abschnitt Sie können als Rewrite-Regeln wie folgt hinzufügen

<rewrite>
    <rewriteMaps>
        <rewriteMap name="map1" defaultValue="(.+)"/>
    </rewriteMaps>
    <rules>
        <rule name="Rewrite rule1 for map1">
        <match url="product/(.+)/(.+)"/>
        <conditions>
            <add input="{map1:{REQUEST_URI}}" pattern="(.+)"/>
        </conditions>
        <action type="Rewrite" url="productdetail.aspx?Product={R:1}" appendQueryString="false" redirectType="Permanent"/>
        </rule>
    </rules>
  </rewrite>

Wenn Sie Probleme beim Verständnis des Rewrite-Mechanismus haben würde ich empfehlen, dass Sie einen href lesen <= "http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting- mit-asp-net.aspx“rel = "nofollow"> dieser Artikel von Scott Guthrie.

Ich denke, das sollte funktionieren für Sie eine IIS 7.0 oder 7.5-Umgebung gegeben.

Andere Tipps

Ich folgte diesem Artikel: Gewusst wie: Verwenden Routing mit Web Forms

Bevor ich es gefunden hatte ich Probleme auf meinem Hostern und keiner vor Ort. Es war mein web.config.

Mein Gastgeber wurde IIS 7 mit integrierten Pipeline verwenden, ich fehlte dies:

<handlers>
    <!---after all the others--->       
    <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>

EDIT: Nach Ihren Einstellungen und Code, links die einzige Sache ist, um zu überprüfen, ob Sie das Routing-DLL in web.config definiert haben und auch zu Ihrem bin-Verzeichnis bereitgestellt:

<add assembly="System.Web.Routing, Version=3.5.0.0, 
  Culture=neutral, 
  PublicKeyToken=31BF3856AD364E35"/>

Versuchen Sie, diese in Sie web.config. Arbeitete für mich.

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

Just zu informieren, was schließlich meine Lösung war ... auf dem IIS7 den Pipeline-Modus Integriert ändern und ich folowed einige Linien auf der web.config aus dem obigen Link Hinzufügen ... http://msdn.microsoft.com/en-us/library/cc668202. aspx

viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top