如果请求包含XML,Elmah不会在MVC应用程序中记录http post请求的异常

asg*_*eo1 12 error-handling asp.net-mvc elmah asp.net-mvc-4

我在MVC4(RC)应用程序中遇到了一个奇怪的问题.(在.NET 4.0上运行)

我刚刚设置了Elmah来记录异常/错误.

我基本上安装了Elmah.MVCelmah.sqlserver NuGet包.(分别为2.0.0和1.2版)

它似乎工作正常 - 我可以去elmah页面查看错误:

http://myserver/elmah

例如,如果我创建了一些404错误,它们将出现在此日志中.

不起作用的是:我有一个带有[HttpPost]动作的标准MVC控制器.我已经设置好了它总是会抛出一个异常:

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

然后我尝试通过jQuery将数据发布到此控制器:

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

好的,这很有效.响应返回死亡的典型黄色屏幕,并且错误被捕获并记录在Elmah中.

但是,如果我尝试发布类似XML/HTML的内容,则Elmah中不会记录错误.我仍然从服务器后面得到相同的响应(死亡的黄色屏幕),但在Elmah中没有任何内容.

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

为什么?这没有意义.

请注意,我已经关闭了操作的请求验证.如果我不这样做,那么发布XML/HTML数据会导致此异常:

从客户端检测到潜在危险的Request.Form值

NuGet也会拒绝记录该异常 - 我认为这是一个错误:

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

那么我遇到的这个问题的原因是什么?它是一个与我上面发现的问题相关的错误?

我只是因为请求包含XML/HTML而无法记录异常,这似乎是一个非常不幸的情况.

当然有办法解决这个问题吗?

asg*_*eo1 2

我现在有一个解决办法,有人在http://code.google.com/p/elmah/issues/detail?id=217上建议

<system.web>您可以通过将其添加到以下部分来强制 ASP 使用旧的请求验证逻辑Web.config

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)

这将在全球范围内影响应用程序,这并不是一个很好的情况。

如果有人有更好的东西,请告诉我。