MVC: Wie route /sitemap.xml ein ActionResult?
Habe ich eine SitemapActionResult, der überschreibt die ActionResult und erzielt einen SEO sitemap.xml wenn http://www.sprelle.no/Home/SiteMap ist der hit. So weit So gut.
Was ich möchte, obwohl, ist, zu dienen dem sitemap.xml wenn Google-Besuche /sitemap.xml. Damit das funktioniert, benötige ich eine route, die sieht "sitemap.xml" und verweist auf /Home/Sitemap.
Wie erstelle ich diese Zuordnung (in der Routen-Tabelle)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen einer Karte für:
Beachten Sie, dass die route controller und die Aktion Optionen sind hart codiert.
Können Sie diese verwendet.
Schritt 1. Zuordnung der Dateiendung zu TransferRequestHandler
Integrierten Modus von IIS 7 verwendet HTTP-Handler mappings, die Punkt Pfad /verb-Kombinationen, um einen HTTP-Handler. Zum Beispiel, es gibt eine Standard-Ereignishandler-Zuordnung, welche Punkte path="*.axd" verb="GET,HEAD,POST,DEBUG" auf den entsprechenden ISAPI-Modul für den .NET-runtime-version der site unter. Der einfachste Weg, um zu sehen, die Standard-Handler in IIS Express ist, führen Sie eine Website, die unter IIS Express mit der rechten Maustaste auf das IIS Express-Symbol in der Taskleiste, klicken Sie auf "alle Anwendungen", und klicken Sie auf eine Website. Die applicationhost.config link auf der Unterseite verbunden ist, so können Sie einfach darauf klicken und es sollte laden in Visual Studio.
Wenn Sie nach unten scrollen, werden Sie sehen, dass es eine allumfassende StaticFile-mapping für
path="*" verb="*"
Punkte, die zuStaticFileModule,DefaultDocumentModule,DirectoryListingModule
. Das ist, was wird mit Ihren .html-Anfrage, wenn Sie nichts tun. So der erste Schritt ist, um einen Ereignishandler hinzuzufügen, die in Ihrem web.config, die zeigen wird*.html
Anforderungen an dieTransferRequestHandler
.TransferRequestHandler
ist der handler, der kümmert sich um die extensionless URLs, die Sie verwendet, um zu sehen, in der MVC-Routen, z.B./store/details/5
.Hinzufügen von ein handler-mapping ist wirklich leicht - nur öffnen Sie Ihr web.config und fügen Sie die
<system.webServer/handlers>
Knoten.Beachten Sie, dass können Sie stellen Sie den Pfad mehr spezifisch, wenn Sie möchten. Zum Beispiel, wenn Sie nur wollten, abzufangen, in eine spezifische Anfrage, die Sie nutzen könnten path="sample.html"
Schritt 2. Konfigurieren der route
Als Nächstes benötigen Sie eine neue route. Öffnen
App_Start/RouteConfig.cs
ist und es zu denRegisterRoutes
nennen. Meine kompletteRegisterRoutes
sieht wie folgt aus:Schritt 3. Route Vorhandene Dateien
Dass fast deckt, aber es gibt eine weitere Sache zu kümmern - übergeordnete Anforderungen, die die übereinstimmung mit einer bestehenden Datei. Wenn Sie habe eine aktuelle Datei namens myfile.html das routing-system wird nicht lassen Sie Ihre route zu laufen. Vergaß ich diese, endete mit einem HTTP-500-Fehler (Rekursion überlauf) und hatte zu Fragen, Eilon Lipton für die Hilfe.
Sowieso, das ist einfach zu beheben - einfach Routen hinzufügen.RouteExistingFiles = true, um Ihre route Registrierung. Meine abgeschlossenen RegisterRoutes Aufruf sieht wie folgt aus:
Das ist es.
Ich getestet, indem diese controller-action:
Um dieses zu erhalten, Arbeit, die Sie tun müssen 2 Dinge: