Я получаю пустую страницу при развертывании приложения MVC на IIS - PullRequest
17 голосов
/ 17 февраля 2009

В настоящее время я развертываю свое приложение, созданное с использованием RC MVC ASP.NET, на производственном сервере, который сейчас ничего не показывает. Маршруты в моем global.ascx типичны, т.е.

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}.aspx/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
        routes.MapRoute(
          "Root",
          "",
          new { controller = "Home", action = "Index", id = "" }
        );

Может кто-нибудь понять, почему он показывает мне только пустые страницы

Извините, я забыл упомянуть, что это IIS 6

Интересно, что он также работает на моем локальном IIS (то есть как на локальном, встроенном с VS, так и на стандартном с XP)

Ответы [ 12 ]

19 голосов
/ 11 марта 2009

Вы также получите пустую страницу, когда у вас есть настройка обработки ошибок в вашем global.asax и что-то общее неправильно (например, сборка, которая не может быть найдена).

Когда вы отключите его в global.asax, вы увидите ошибку сервера. Не забудьте включить его снова после исправления этих начальных ошибок.

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "ErrorController");
    routeData.Values.Add("action", "HandleTheError");
    routeData.Values.Add("error", exception);

    Response.Clear();
    Server.ClearError();

    IController errorController = new ErrorController();
    errorController.Execute(new RequestContext(
        new HttpContextWrapper(Context), routeData));
}
3 голосов
/ 24 ноября 2010

Пустая страница отображается при возникновении ошибок в определенных местах - в моем случае это было исключение MethodNotFoundException ...

Чтобы увидеть ошибку, убедитесь, что вы включили службы «Ошибки HTTP» и «Перенаправление HTTP» в роли «Веб-сервер (IIS)».

2 голосов
/ 13 февраля 2015

Обычно, когда я получаю это, это потому, что я забыл добавить следующее в Web.config при развертывании на IIS6 после разработки на IIS7 (или IIS Express 7, который поставляется с Visual Studio):

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
1 голос
/ 18 февраля 2009

Я решил проблему, основной проблемой были разные версии инфраструктуры MVC. На производственном сервере была установлена ​​бета-версия MVC, а я установил MVC RC1. Поэтому, как только я установил RC1 на сервер и запустил сценарии регистрации расширения mvc, все заработало. Спасибо за вашу помощь, ребята

0 голосов
/ 09 мая 2019

Попробуйте удалить файл app_offline.htm, если он создается в вашем приложении.

0 голосов
/ 22 июля 2018

В случае, если кто-то сталкивается с той же проблемой, что и я, попробуйте следить:

protected void Application_Error(object sender, EventArgs e) {

Для меня приложение молча проваливалось, и я не знал, так что, очевидно, оно возвращало пустое значение, но запутанная часть возвращала 200 как код состояния ответа http.

Во всяком случае, я надеюсь, что это поможет кому-то в будущем.

0 голосов
/ 23 февраля 2018

Это также происходило со мной, когда:

1) Я добавил атрибут CompressAttribute для добавления Gzip, когда браузер принимает его.

response.AppendHeader("Content-Encoding", "gzip");
                    response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);

2) Я изменил выходной HTML, чтобы изменить отображаемый номер телефона:

response.Filter = new OutputHtmlReplacer(response.Filter, phoneNumber);

где OutputHtmlReplacer - это класс, который наследуется от MemoryStream

Итак, решение было:

1) Проверьте заголовки и проверьте, применяем ли мы сжатие.

2) Если это так, то новый фильтр ответов OutputHtmlReplacer должен быть обернут GzipStream.

0 голосов
/ 12 июня 2017

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

Одна вещь, которая может помешать вам увидеть исключения, - это GlobalFilterCollection, вызываемая через фильтр MVC в global.asax при первой загрузке сайта. Обычно вы можете найти эти вызовы в файле Global.asax. Этот файл обычно вызывает объект HttpApplication при первой загрузке веб-сайта и его событиях. В своих событиях он затем загружает в добавленные разработчиками маршруты MVC по умолчанию, но также может загружать фильтры, которые обрабатывают обработку исключений по всему сайту. Разработчики часто наполняют обработку исключений через фильтры в global.asax, думая, что они интеллектуально обрабатывают исключения и проблемы от пользователя, но это ошибка. Если вы найдете там фильтр, просто закомментируйте их. Внезапно все ваши ошибки снова появятся на вашей HTML-странице.

Вы можете устранить проблему! Удачи!

0 голосов
/ 17 февраля 2009

Есть ли у вас обработчики HTTP и модули, определенные в web.config на рабочем сервере?

    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>

В IIS6 URL-адреса должны содержать .mvc (например, /Products.mvc/ListAll). Проверьте эти руководства для правильной конфигурации IIS 6 и обходного пути расширения .mvc:

Развертывание ASP.NET MVC в IIS 6

Использование ASP.NET MVC на IIS 6 без расширения .MVC

0 голосов
/ 17 февраля 2009

Исходя из этого, я ожидаю, что первый маршрут будет работать, если вы переходите на URL-адрес, такой как /Home.aspx, но если вы просто переходите на / url, то ASP.net не знает, как обрабатывать URL. Он попытается сопоставить страницы IIS по умолчанию, такие как index.html, default.aspx, index.aspx и т. Д. Если ничего не найдено, запрос никуда не попадает. Пытаясь создать файл default.aspx (или любой другой индексный файл в маршруте), затем в файле page_load выполните команду response.redirect("~/Home.aspx").

.

Если это не сработает, я бы проверил этот источник . Одна из главных причин того, что IIS 6 и MVC не играют хорошо, заключается в том, что в IIS 6 по умолчанию отсутствует подстановочный знак *, сопоставленный с dll ASP.net.

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

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