IIS versucht hier intelligent zu sein. Er fängt den Punkt in der URL ab und denkt, dass dies eine statische Datei ist, und versucht, sie mit dem Standardhandler StaticFile
zu bedienen. Das Ereignis wird nicht in die verwaltete ASP.NET-Anwendung geleitet.
Die erste Möglichkeit ist die folgende in Ihrer web.config
<system.webserver>
<modules runAllManagedModulesForAllRequests="true" />
hinzufügen, aber das ist eigentlich nicht etwas, was ich dir tun würde empfehlen, da dies einen negativen Effekt auf die Leistung der Anwendung haben könnte, weil jetzt alle Anforderungen an statische Dateien (wie .js, .css, images, ...) werden durch die verwaltete Pipeline geleitet.
Der empfohlene Ansatz ist es, die folgende Prozedur, um Ihre web.config
(<handlers>
Tag von <system.webServer>
) hinzuzufügen:
<system.webServer>
<handlers>
<add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
...
</handlers>
</system.webServer>
Beachten Sie, wie wir festgelegt haben, dass diese Prozedur nur auf eine bestimmte URL und HTTP-Verb gelten.
Jetzt, wenn Sie GET /robots.txt
GET, wird IIS nicht mehr mit dem StaticFile
Handler behandeln, sondern wird es stattdessen an die verwaltete Pipeline ASP.NET übergeben. Und dann wird es von der Routing-Engine abgefangen und an die entsprechende Controller-Aktion weitergeleitet.
Gibt es eine Möglichkeit für den Umgang mit statischen Dateien IIS Verhalten zu halten, aber wenn die Datei nicht gefunden wird, statt eine IIS 404-Seite dienen , übergeben Sie es zur Überprüfung in die verwaltete Pipeline? –
Ah ha, [gefunden] (http://stackoverflow.com/questions/4483849/default-redirect-for-error-404)! –