Исключение ASP.NET MVC?

с сегодняшнего дня я получаю исключение на IIS7.5 с ASP.NET MVC, но я не знаю почему.

Это происходит при использовании System.Net.WebClient.DownloadString()

[WebException: удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера.]

Если я открою URL в браузере. Сайт показывает нормально.

В VS2008 состояние трассировки отладки: "200 OK"

Единственное, что он мог видеть, это:

Response.Headers» типа Exception «System.PlatformNotSupportedException». System.Collections.Specialized.NameValueCollection {System.PlatformNotSupportedException}

Используйте встроенный конвейерный режим в IIS.

Оба веб-сайта работают в одном и том же пуле приложений .NET версии 2.0 с включенным интегрированным конвейером. DownloadString, например. google.com и т. д. работает. Только если я вызову MVC, он испортится.

Вызываемый контроллер в MVC выглядит так:

    public void online()
    {
        Response.Write(Date.Time.Now);
        Response.End();
        return;
    }

Это работало раньше. Может кто-нибудь может помочь получить более подробную информацию, чтобы отследить ошибку.

ОБНОВЛЕНИЕ:

Понятно. Блин. Я проверил историю Subversion в ASP.NET MVC и проверил каждую строку. В моем BaseController я недавно добавил:

string strUserAgent = Request.UserAgent.ToString().ToLower();

После удалить. Все снова работает. Но почему происходит сбой System.Net.WebClient при запросе UserAgent? Даже с 200 Статусом. Я проведу небольшое расследование.


person csharpnoob    schedule 14.01.2010    source источник
comment
Похоже на проблему несовместимости. Был ли веб-сайт разработан для какой-либо другой версии IIS?   -  person James    schedule 14.01.2010
comment
Неа. vs2008, iis7.5, mvc2, чистая 3.5   -  person csharpnoob    schedule 14.01.2010


Ответы (1)


В моем случае это помогает:

if (Request.UserAgent != null)
{
  string strUserAgent = Request.UserAgent.ToString().ToLower();
}

но System.Net.WebClient довольно глупо генерировать исключение, когда веб-сервер выполняет Request.UserAgent, даже если есть HTTP-статус 200.

person csharpnoob    schedule 14.01.2010
comment
Request.UserAgent — это поле в заголовке HTTP-запроса. Обычно он устанавливается запрашивающим объектом (браузером, приложением и т. д.), но может быть и вовсе опущен. Поскольку вы не устанавливаете его явно в запросе WebClient, это, вероятно, имеет место для этих запросов (и используемый вами браузер устанавливает его автоматически). В таком случае это свойство null, и выполнение .ToString() определенно приведет к провалу. - person patridge; 20.03.2012