IIS возвращает 404 для файла ASP.NET MVC3 (.cshtml) - PullRequest
9 голосов
/ 10 сентября 2011

У меня стандартное приложение ASP.NET 4.Внутри этого приложения также есть несколько бритвенных (например, test.cshtml) файлов.Однако приложение ASP.NET работает, если я указываю браузеру файл /test (без расширения).IIS (статический обработчик файлов) возвращает 404.

То же приложение и даже отдельные .cshtml файлы работают на локальном компьютере (с IIS7.5 / Win7) и на сервере с (IIS7.5 / Win2008R2)Однако он не работает на сервере с IIS7.0 / Win2008.

MVC3 установлен на обеих машинах, пулы приложений на обеих машинах интегрированы .NET 4.0.

Как.cshtml обработчики работают?Когда IIS решает использовать статический обработчик файлов, а когда .cshtml?Что еще я должен проверить?

РЕДАКТИРОВАТЬ:

Разъяснение - я на самом деле не использую всю инфраструктуру MVC, это какобычный старый файл .ASPX или PHPНет контроллеров, нет маршрутов, нет «просмотров».Я использую его для простого сценария в дополнение к старому приложению ASP.NET.

Я думаю, что это не проблема программирования, поскольку она работает на локальном компьютере, а скорее проблема конфигурации - IIS на Win2008сервер может быть неправильно настроен.

EDIT2:

(Машины с IIS7.5 работают, только машина с IIS7.0 не работаетНо я не уверен, является ли это проблемой версии IIS.)

EDIT3:

На моем локальном компьютере, где он работает,Я не установил никакой маршрутизации.TheCodeKing и Кит предположили, что мне нужно где-то иметь маршрутизацию.Может быть да, но это не в моем приложении.Он может быть установлен по умолчанию где-нибудь в конфигурации IIS.

Есть ли у вас какие-либо подсказки, где можно найти эту «неявную» маршрутизацию?

EDIT4:

Примечание. На всех компьютерах для *.cshtml есть HttpForbiddenHandler, поскольку вы не можете загрузить файл cshtml.И есть также TransferRequestHandler для *..(Оба включены.)

EDIT5:

Я обнаружил, что на серверах, где он работает, мне нужно иметь любой.cshtml файл в корне сети.Если я удалю .cshtml из корня сети и попытаюсь вызвать любой из подкаталога, он не будет работать.

EDIT6:

Я пробовал это на двух других машинах: одна с IIS 7.5, а другая с IIS 7.0.На IIS 7.5 он работает (обычная установка без конфигурации), но на IIS 7.0 он не работает.

Как заставить его работать на IIS 7.0?

Ответы [ 7 ]

6 голосов
/ 18 сентября 2011

Ура!После нескольких дней борьбы я нашел это! :))

Один из способов заставить его работать на IIS 7.0 - включить runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true" />

(Хотя на IIS 7.5 он работает даже со значением по умолчанию runAllManagedModulesForAllRequests="false".)

Не спрашивайте меня, почему:) Может быть, кто-томогу объяснить это.

5 голосов
/ 10 сентября 2011

Не уверен, что это ваша конкретная проблема, но похоже, что веб-страницы ASP.NET не работают (MVC 3 и выше зависит от веб-страниц для Razor и других вещей). Иногда вещи могут быть установлены в порядке, который испортит некоторую конфигурацию ASP.NET и IIS, что, в свою очередь, может привести к тому, что веб-страницы не будут работать, и файл cshtml не будет выполнен.

Попробуйте запустить aspnet_regiis / i , чтобы очистить все это.

1 голос
/ 25 сентября 2012

Исправление для IIS7.0 доступно по адресу: http://support.microsoft.com/kb/980368

Я установил его сегодня на Windows 2008 SP2 (который требует перезагрузки ОС). Поведение в IIS 7.0 теперь похоже на IIS 7.5

Исправлена ​​проблема на моей стороне / без принуждения:

<modules runAllManagedModulesForAllRequests="true" />

Это лучший подход, чем запуск всех модулей для любого запроса (даже для css / images / ...), который может вызвать ненужную перегрузку.

0 голосов
/ 31 декабря 2014

cshtml может работать, если вы установите web.conf.

Вы можете подумать, что это HTML, но с синтаксисом бритвы.

0 голосов
/ 10 сентября 2011

Поскольку вы не используете MVC, вам необходимо настроить маршрутизацию или переписать с использованием модуля перезаписи IIS, чтобы ожидать, что /test разрешится до /test.cshtml. Вы не получите такого поведения без него.

например. что-то вроде этого в вашем приложении запуска.

routes.MapPageRoute(
   "extension-less paths",
   "{view}",
   "~/{view}.cshtml"
);
0 голосов
/ 10 сентября 2011

Если это веб-приложение asp.net 4.0, вам нужно будет вручную настроить маршруты, создать соответствующие контроллеры и убедиться, что ваши представления (файлы .cshtml) действительно существуют в / Views / ControllerName папка.

Я бы также порекомендовал настроить ваш проект для использования IISExpress в вашей среде разработки для более точного соответствия вашему веб-серверу. Это очень помогает при устранении подобных проблем.

0 голосов
/ 10 сентября 2011

Вы уверены, что IIS имеет достаточные разрешения для доступа к файлу в каталоге / test?

Это может вызвать некоторые глупые проблемы, как я обнаружил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...