2013-03-13 2 views
19

У меня есть проект, который работает со связью, когда вы запускаете его из визуальной студии. Однако после развертывания обработчик связывания никогда не заберет маршрут. Вместо этого он переходит к статическому файловому обработчику, который возвращает ответ 404.MVC4 Связки возвращаются 404

Любые идеи? Я вижу сборку оптимизации в корзине веб-сайта в IIS.

Он использует пул приложений 4.0 и интегрированный режим.

Мне интересно, есть ли у кого-нибудь идеи или предложения?

Благодаря

----- обновление на основе вопросов -----

VS2012

targetFramework = "4,5"

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

BundleConfig по умолчанию предоставляется при использовании шаблона проекта интернет-приложения MVC4.

Сайт развертывается в корне. Это странно, когда я устанавливаю EnableOptimizations = true (из-за работы в режиме отладки с помощью visual studio F5), он отлично работает! Я могу перейти к контенту/css, и он выплевывает комбинированный css.

Я развертываю его и все остальное работает, но связывает!

+1

Может быть, ваш путь к связанным файлам отличается от того, который должен быть ... –

+0

- это время выполнения, установленное в 4.0 или 4.5? Проверьте web.config. Вы используете VS2012 или 2010? – ApolloSoftware

+0

Я не вижу, как путь может быть неправильным, учитывая, что я делаю публикацию в своей папке IIS, а все остальное загружается отлично (представления, макеты, изображения). Если я вручную ссылаюсь на файл css /content/site.css, он загружается. Но когда я нажимаю/content/css, модуль bundlemode не перехватывает вызов и загружает связанный контент css! – Mike

ответ

23

Я только что ударил (и решил) эту проблему.

Убедитесь, что виртуальный путь вашего пула не может быть запутан для существующего каталога или фактического имени файла. В моем случае, я закодированы как:

bundles.Add(new ScriptBundle("~/bundles/main.js").Include(... 

Но когда я изменил его на

bundles.Add(new ScriptBundle("~/bundles/main").Include(... 

все начали работать.

+0

У меня была та же проблема, что и для доступа к шрифтам удивительные шрифты, для ** других решений ** попробовать эти ссылки, которые связаны с виртуальным путем 'StyleBundle' **: [Ссылка 1] (http://www.mvccentral.net/story/details/articles/kahanu/stylebundle-403-error-resolved), [Ссылка 2] (http://forums.asp.net/t/1774324.aspx?MVC4+css+bundling+and+image+references), [Ссылка 3] (http://ericpanorel.net/2013/10/25/font-awesome-4-0-mvc-bundling-and-minification/), [Ссылка 4] (http://jameschambers.com/ 2014/08/add-some-font-awesome-to-mvc-and-bootstrap /), надеюсь, что это кому-то поможет. – stom

12

Обновленный ответ 11/17/2013 Это связано с тем, что по умолчанию MVC-маршрутизация обрабатывает * вместо *. *, То есть IIS или ApplicationHost.config IIS Express имеет следующее:

  <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 

Так, чтобы обойти его, мы можем добавить следующее в web.config:

 <system.webServer> 
     <handlers>  
      <add name="UrlRoutingHandler" 
       type="System.Web.Routing.UrlRoutingHandler, 
        System.Web, Version=4.0.0.0, 
        Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" 
       path="/bundles/*" 
       verb="GET"/>  
     </handlers> 
     </system.webServer> 

Для получения дополнительной информации, вы можете ссылаться на следующее: http://weblogs.asp.net/owscott/archive/2013/01/16/handing-mvc-paths-with-dots-in-the-path.aspx ASP.NET MVC Url Route supporting (dot)

Старый неправильный ответ: в принципе, DOT, как правило, не допускается в виртуальном пути, когда IIS разбора URL. В этом a Link указан следующий параметр URLScan AllowDotInPath: По умолчанию этот параметр установлен в 0. Если этот параметр установлен в 0, URLScan отклоняет любой запрос, содержащий несколько периодов (.).Это предотвращает попытки маскировки запросов на опасные расширения имен файлов путем размещения безопасного имени имени файла в информации о пути или строке запроса в URL-адресе. Например, если этот параметр установлен в 1, URLScan может разрешить запрос для http: // servername/BadFile.exe/SafeFile.htm, потому что он интерпретирует его как запрос для HTML-страницы, когда это фактически запрос на исполняемый файл (.exe) с именем страницы HTML в области PATH_INFO. Если для этой опции установлено значение 0, URLScan также может запрещать запросы для каталогов, содержащих периоды.

+1

В документации говорится, что он отклонит запрос, содержащий ** несколько ** периодов; который указывает, что один период должен быть в порядке. – gerrod

+1

@gerrod, последнее предложение указано: если для этого параметра установлено значение 0, URLScan может также отклонить запросы для каталогов, содержащих периоды. С тем, как работает пакет, он добавит некоторый сгенерированный суффикс хэширования к сгенерированному URL. Таким образом, появится виртуальная папка. Таким образом, это не сработает. – xinqiu

+0

Ух, нет, это все еще не так. Хэш добавляется как параметр строки запроса, например. 'Пучки/main.js? V = {}' хэш. Я буквально попробовал это, и вы правы **, что наличие более одного периода пути приведет к тому, что URLScan отклонит запрос; но наличие одного периода в порядке. – gerrod

3

Даже у меня такая же ошибка. Добавление <modules runAllManagedModulesForAllRequests="true" /> под <system.webServer> в файл web.config решило проблему.

0

У меня была такая же проблема даже с образцом приложения MVC. Я видел, что шаблон по умолчанию связывает стиль с именем css, который, я думаю, IIS не любит, что приводит к ошибке 404.

Изменение имени связки от css до APPCSS решит проблему для меня.

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