2016-09-16 5 views
1

У меня очень странная проблема. На мой локальный сайт MVC, при загрузке страницы и отображает хорошо, но в Firebug в самой первой строке на вкладке консоли говорит ...MVC получает ошибку 404 для страницы, но страница по-прежнему отображается правильно

"NetworkError: 404 Not Found - http://localhost:11634/clay-test-3" 

... где глина тест-3 является URL страницы ,

Я использовал routedebugger, чтобы проверить маршрут, и все, что там работает. Ну, очевидно, это должно было быть, потому что он находит свой путь к правильному контроллеру и правильному действию и генерирует представление.

К сожалению, на производственной площадке все, что подходит для одной и той же страницы, представляет собой стандартную страницу с ошибкой IIS 404, без routedebugger, без ошибок в Elmah.

Если кто-то может объяснить мне, как (на локальном хосте), я могу получить ошибку 404 И СТРАНИЦА STILL DISPLAYS FINE, что может помочь мне отследить проблему.

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

На моей локальной машине работает IIS 10.0, производственная коробка IIS 8.0.

Спасибо за ваше время!

+0

Пожалуйста, поделитесь своим кодом! –

+0

Справедливый комментарий Сунил Кумар, но какой код? Как выясняется (см. Решение ниже), одна из моих проблем была в моем шаблоне макета, который составляет всего 18 строк, но другой, на мой взгляд, составляет 477 строк. Маршрут был довольно прост (5 строк кода), но он использует класс, полученный из IRouteContstraint. Этот класс имеет длину 25 строк. Контроллер имеет длину 17 строк. Если бы я включил весь соответствующий код, это было бы более 500 строк. Наверное, я надеялся, что у кого-то могла бы быть аналогичная проблема, и, по крайней мере, я мог бы рассказать мне о местонахождении во всем этом коде, чтобы посмотреть. Cheers, Clay – clayRay

ответ

0

У вас есть сопоставление маршрутов для обработки дефис/дефис в имени контроллера? Насколько я знаю, у вас не может быть имени контроллера, имеющего дефис/дефисы, поэтому вам нужно каким-то образом сопоставить URL-адрес вашего «глиняного теста-3» с вашим контроллером. Это может не объяснять, почему страница будет отображаться с использованием localhost, но не на производственной коробке, но она может решить ошибку 404. Пример:

routes.MapRoute(
      "clay-test-3", // Route name 
      "clay-test-3", // URL with parameters 
      new { controller = "ClayTest3", action = "Index" } // Parameter defaults 
     ); 

Также см. asp mvc using dashes in controller names and routing?.

+0

Привет, спасибо, что ответили. Я использую IRouteConstraint. Будет обновлен мой вопрос, потому что я не могу добавить полный код в этот комментарий. – clayRay

0

ОК, похоже, что это были две отдельные проблемы: одна из которых вызывала ошибку 404 для успешно отображаемой страницы в локальном хосте, а другая, которая вызывала ошибку 404 (и страницу вообще не отображалась) на моем производственный сервер.

Первая проблема была вызвана следующим ...

Поскольку CSS стилей мне дали было определение тела, которое требуется другой набор классов для различных типов страниц, то есть:

<body class="home_page"> 

... Я решил переместить <body> & </body> тегов из шаблона макета, и в поле зрения, так что HTML блок в файле _LayoutSite.cshtml выглядел следующим образом:

<html> 
    ... [various other code] 
    @RenderBody() 
    @RenderSection("scripts", required: true) 
</html> 

Видимо, это не-нет. Теги тела должны быть в шаблоне макета, около @RenderBody().

<html> 
    ... [various other code] 
    <body> 
     @RenderBody() 
     @RenderSection("scripts", required: true) 
    </body> 
</html> 

Поэтому я исправил это и создал контейнер div с требуемым классом в представлении.Т.е.: <div class="home_page">

Другая проблема (вызывающая ошибку 404 на производственном сервере) была результатом небольшого количества кода в представлении, которое было скопировано из другого проекта, который имел несколько другую маршрутизацию.

<a href="@Url.Action("ViewPage", "Page")" id="logo"><img ... etc ... ></a> 

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

Фу! Это немного пошло на охоту. Спасибо за ваши ответы и комментарии.