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" />
Ich stand vor demselben Problem. Die beste Lösung für mich ist also:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
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>
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>
Für jeden, der die Ausnahme "Kann abstrakte Klasse nicht erstellen kann" erhalten, wenn er die UrlRoutingHandler
-Methode verwendet, kann dies folgende Ursachen haben:
path="/Files/*"
) in Ihrer web.config-Deklaration undIch 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.