wake-up-neo.com

Unterstützung für ASP.NET MVC-URL-Route (Punkt)

Ich hoffe, dass Sie mir bei dem unten genannten Problem helfen können.

Ich verwende ASP.NET MVC 3 auf IIS7 und möchte, dass meine Anwendung Benutzernamen mit Punkten unterstützt.

Beispiel: http: //localhost/john.lee

So sieht mein Global.asax aus: ( http: // localhost/ {username})

routes.MapRoute(
    "UserList",
    "{username}",
    new { controller = "Home", action = "ListAll" }
);

Die Anwendungen funktionieren, wenn ich auf andere Seiten wie http: //localhost/john.lee/details etc. zugreife.

Die Hauptbenutzerseite funktioniert jedoch nicht. Ich möchte, dass die App wie Facebook funktioniert, wenn http://www.facebook.com/john.lee unterstützt wird.

Ich habe den folgenden Code verwendet und es funktionierte bei mir überhaupt nicht:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

Ich konnte den folgenden Code verwenden und die App dazu bringen, Punkte zu akzeptieren, aber ich möchte den folgenden Code aus verschiedenen Gründen nicht verwenden. Bitte sagen Sie mir, dass es eine Möglichkeit gibt, dieses Problem zu überwinden.

<modules runAllManagedModulesForAllRequests="false" />
35
Cindro

Ich stand vor demselben Problem. Die beste Lösung für mich ist also:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
0
Satish Singh

Fügen Sie der web.config einen UrlRoutingHandler hinzu. Dies erfordert jedoch, dass Ihre URL etwas genauer ist (z. B. /Users/john.lee).[.____.(Das bedeutet, dass jede URL, die mit/Users beginnt, als MVC-URL behandelt wird:

<system.webServer>    
  <handlers>      
    <add name="UrlRoutingHandler" 
         type="System.Web.Routing.UrlRoutingHandler, 
               System.Web, Version=4.0.0.0, 
               Culture=neutral, 
               PublicKeyToken=b03f5f7f11d50a3a" 
         path="/Users/*" 
         verb="GET"/>      
  </handlers>
</system.webServer>
57
Klaas Coenraads

Fügen Sie diesen Abschnitt einfach zu Web.config hinzu, und alle Anforderungen an die Route/{* pathInfo} werden vom angegebenen Handler verarbeitet, auch wenn in pathInfo Punkte vorhanden sind. (entnommen aus dem ServiceStack MVC Host-Beispiel für Web.config und dieser Antwort https://stackoverflow.com/a/12151501/801189 )

Dies sollte für IIS 6 & 7 funktionieren. Sie können bestimmten Pfaden nach der 'Route' verschiedenen Pfaden zuweisen, indem Sie in den 'Add'-Elementen path = "*" ändern

  <location path="route">
    <system.web>
      <httpHandlers>
        <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
  </location>
4
V.B.

Für jeden, der die Ausnahme "Kann abstrakte Klasse nicht erstellen kann" erhalten, wenn er die UrlRoutingHandler-Methode verwendet, kann dies folgende Ursachen haben:

  • Verwenden Sie einen eingeschränkten "Pfad" (z. B. path="/Files/*") in Ihrer web.config-Deklaration und
  • Ein Ordner/Pfad mit demselben Namen ist in Ihrem Projekt vorhanden
1
Mark

Ich denke nicht, dass das Problem hier das Problem ist. AFAIK das einzige Zeichen, das nicht im Benutzernamen stehen sollte, ist ein /

Ohne die Route zu sehen, die mit john.lee/details übereinstimmt, ist es schwer zu sagen, was falsch ist. Ich vermute jedoch, dass Sie eine andere Route haben, die mit der URL übereinstimmt. 

Ich empfehle die Verwendung eines Tools wie Glimpse , um herauszufinden, welche Route abgeglichen wird.

0