Ответ 1
IIS пытается быть умным здесь. Он перехватывает точку в URL-адресе и считает, что это статический файл и пытается обслуживать его с помощью обработчика StaticFile
по умолчанию. это событие dopesn't попадает в управляемое приложение ASP.NET.
Первая возможность заключается в добавлении следующего в ваш web.config
<system.webserver>
<modules runAllManagedModulesForAllRequests="true" />
но на самом деле это не то, что я бы рекомендовал вам делать, потому что это может негативно повлиять на производительность вашего приложения, потому что теперь все запросы к статическим файлам (например,.js,.css, images,...) будут через управляемый трубопровод.
Рекомендуемый подход заключается в добавлении следующего обработчика в тэг web.config
(<handlers>
<system.webServer>
):
<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>
Обратите внимание, как мы указали, что этот обработчик применим только к определенному URL-адресу и HTTP-глаголу.
Теперь, когда вы GET /robots.txt
, IIS больше не будет обрабатывать его с помощью обработчика StaticFile
, но вместо этого передаст его управляемому конвейеру ASP.NET. И затем он будет перехвачен движком маршрутизации и перенаправлен на соответствующее действие контроллера.