Маршрутизация статических файлов в ASP.NET MVC 3, например robots.txt - PullRequest
14 голосов
/ 24 ноября 2011

Мне бы хотелось, чтобы следующая ссылка "http://mywebsite.com/robots.txt" была связана со статическим файлом ~ / Content / robots.txt.

Как я могу это сделать?

Спасибо, Merijn

Ответы [ 6 ]

11 голосов
/ 30 ноября 2011

Добавление такого маршрута должно помочь.Таким образом может быть обработан любой статический файл .txt, например robots.txt.

routes.IgnoreRoute("{resource}.txt"); 
7 голосов
/ 03 сентября 2013

Вы можете установить Модуль перезаписи Url : http://www.iis.net/downloads/microsoft/url-rewrite
Помните, что этот модуль работает на IIS, а не на Cassini / IIS Express.

И добавьте следующее правило к своему web.config в секцию <system.webServer>

<rewrite>
    <rules>
        <rule name="robots" stopProcessing="true">
            <match url="robots.txt" />
            <action type="Rewrite" url="/Content/robots.txt" />
        </rule>
    </rules>
</rewrite>

Я проверил его в новом проекте MVC 3 .NET и оба URL-ответа в одном файле: mywebsite.com/robots.txt
mywebsite.com/Content/robots.txt

5 голосов
/ 24 ноября 2011

Вы можете настроить запрос маршрутизации для файлов на диске.По умолчанию система маршрутизации проверяет соответствие URL-адреса файлу диска, прежде чем оценивать маршруты приложения.Если есть совпадение, файл диска обслуживается и маршруты не используются.Однако это может быть воспринято так, что маршруты проверяются перед проверкой файлов на диске, задав для свойства RouteExisitingFiles для RouteCollection значение true.Поместите это утверждение близко к вершине метода RegisterRoutes - это просто кажется соглашением для приложений MVC.Затем вы определяете маршрут для файлов на диске.При этом следует помнить, что могут возникнуть непредвиденные последствия, потому что беспорядки могут натолкнуться на другие виды URL.

0 голосов
/ 09 апреля 2013

Я смог сделать это, переписав пути в обработчике событий для BeginRequest в global.asax.

BeginRequest += delegate
{
    switch (Request.RawUrl.ToLowerInvariant())
    {
        case "/favicon.ico":
            Context.RewritePath("~/Content/favicon.ico");
            return;
        case "/robots.txt":
            Context.RewritePath("~/Content/robots.txt");
            return;
    }
};
0 голосов
/ 01 марта 2012
 routes.MapRoute("Robots","robots.txt");
0 голосов
/ 24 ноября 2011

Решение 1. Если вы укажете URL. Браузер запросит это для IIS или веб-сервера. MVC не участвует в чтении файла и т. Д. Он передает эти запросы IIS для обработки. Вам необходимо назначить разрешение для папки.

Решение 2. Считайте файл в PresentationModel, если у вас есть. прочитайте этот файл в чанках и вернитесь как тип файла в браузер.

Надеюсь, это даст вам направление.

...