2013-04-09 2 views
2

Я поставил подкаталог в моем приложении ASP MVC 4 под названием «Защищенный», и я сбросил простой файл test.html в этом каталоге, но я не могу на всю жизнь выяснить, как получить мой пользовательский глобальный класс AuthorizeAttribute для запуска, когда я просматриваю файл test.html в своем браузере.ASP MVC 4 не обрабатывает статические файлы

Я использую IIS Express в интегрированном режиме, поэтому я думал, что это сработает. Я даже попробовал IIS 7 в интегрированном режиме, но он все равно не сработает для меня.

Но, может быть, я ошибаюсь. Возможно, это какое-то недоразумение.

В принципе, мне нужно программно разрешать запросы к статическим файлам в этой папке. Есть ли другой способ сделать это?

Дополнение от 04.09.2009 10:07:25 от AD: Ответ Зидада ниже в правильном направлении, но у меня возникли проблемы с настройкой маршрута. Вот что у меня есть, но файл по-прежнему обслуживается напрямую, а не попадает в действие Home/File.

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute("NotFound", "protected/test.html", new { controller = "Home", action = "File" }); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

Дополнение от 4/9/2013 10:20:54 AM от AD: Ohhhhhhhhhhhhhhhhhhh, теперь я понимаю! Определенно недоразумение с моей стороны. Угадайте, мне еще есть чему поучиться. :)

ответ

3

Сначала убедитесь, чтобы добавить в ваш web.config, чтобы убедиться, что IIS не перепускной .NET при обслуживании статических файлов:

<system.webServer> 
... 
    <modules runAllManagedModulesForAllRequests="true" /> 
... 
</system.webServer> 

, то вы должны быть в состоянии добавить файл web.config к вашей защищенной папке, содержащей:

<authorization> 
    <deny users="?" /> 
</authorization> 

Если вы хотите использовать «AuthorizeAttribute», вы можете отобразить маршрут к действию контроллера возвращающих файлов в защищенной папке, и применить атрибут к этому методу, как это:

Can an ASP.NET MVC controller return an Image?

UPDATE: чтобы сохранить URL, чтобы ваши защищенные файлы то же можно настроить маршрут, как это:

routes.MapRoute(
       name: "ProtectedFile", 
       url: "protected/{name}", 
       defaults: new { controller = "Home", action = "File", name = "index.html" }); 

Затем написать свои действия так:

public ActionResult File(string name){ 
// return file 
} 

Вот: Существует штраф за выполнение для обслуживания всех статических файлов через .NET, и это действие не учитывает все лучшие методы HTTP, которые IIS будет делать автоматически cally для вас при обслуживании статических файлов, таких как статическое сжатие содержимого, возврат «не измененных (304)» статуса HTTP, добавление ETAG и т. д.

+0

Обновлен вопрос, чтобы отразить ситуацию сейчас. –

Смежные вопросы