Elmah не регистрирует исключения для запросов HTTP post в приложении MVC - если запрос содержит XML

Я столкнулся со странной проблемой в моем приложении MVC4 (RC). (работает на .NET 4.0)

Я только что настроил Elmah для регистрации исключений / ошибок.

Я в основном установилElmah.MVC а такжеelmah.sqlserver Пакеты NuGet. (версии 2.0.0 и 1.2 соответственно)

Казалось, что все работает нормально из коробки - я могу перейти на страницу elmah и просмотреть ошибки:

http://myserver/elmah

например, если я создаю около 404 ошибок, они появляются в этом журнале.

Что не работает, так это: у меня есть стандартный контроллер MVC с[HttpPost] действие. Я настроил его так, чтобы он всегда выдавал исключение:

public class TestController : Controller
{
    [HttpPost]
    [ValidateInput(false)]
    public void Testing()
    {
        throw new Exception("uh oh");
    }
}

Затем я пытаюсь отправить данные на этот контроллер через JQuery:

$.post('/Test/Testing', {test_data: 'This is some test data'});

Хорошо, это работает. Ответ возвращает типичный желтый экран смерти, и ошибка обнаруживается и регистрируется в Elmah.

Однако, если я пытаюсь опубликовать что-то вроде XML / HTML, ошибкаnot вошел в Элму. Я все еще получаю тот же ответ от сервера обратно (желтый экран смерти), но ничего в Elmah.

$.post('/Test/Testing', {test_data: '<test><test1>This is some test data</test1></test>'});

Зачем? Это не имеет смысла.

Обратите внимание, что я уже отключил проверку запроса на действие. Если бы я этого не делал, то публикация данных XML / HTML привела бы к этому исключению:

A potentially dangerous Request.Form value was detected from the client

NuGet также отказался бы регистрировать это исключение - что я считаю ошибкой:

http://code.google.com/p/elmah/issues/detail?id=217

Так в чем же причина этой проблемы, с которой я сталкиваюсь? Это ошибка, связанная с проблемой, которую я обнаружил выше?

Просто кажется довольно прискорбной ситуацией, когда я не могу регистрировать исключения только потому, что запрос содержал XML / HTML.

Конечно, есть способ обойти это?

Ответы на вопрос(6)

Ваш ответ на вопрос