5

我在我的 mvc 项目中使用 ELMAH 来记录错误。我意识到有时没有记录错误。因此,我将语句包装在 try..catch 中并调用ErrorSignal.FromCurrentContext().Raise(ex);,但没有针对该特定错误再次记录任何内容。所以我尝试进入 ELMAH 源代码(使用 Reflector VS addin)。我在 elmah 中看到了这个异常:

 A potentially dangerous Request.Form value was detected from the client (Text="<br>").
 StackTrace:    at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)

实际源代码:this._form = CopyCollection(request.Form);in public Error(System.Exception e, HttpContext context)in Error.cs。和 CopyCollection 方法:

private static NameValueCollection CopyCollection(NameValueCollection collection)
{
    if ((collection != null) && (collection.Count != 0))
    {
        return new NameValueCollection(collection);
    }
    return null;
}

所以 .Net 不允许从危险的表单数据创建新的 NameValueCollection。我的应用程序中有很多 Html 编辑器,我希望 ELMAH 在任何情况下都能记录错误。

我能做些什么?

4

1 回答 1

3

不幸的是,这是由于 ASP.NET 4.0 引入的一项重大更改。现在的解决方法是要求 ASP.NET 通过将以下内容添加到您的配置中来恢复旧行为:

<httpRuntime requestValidationMode="2.0" />

有关更完整的讨论,请参阅ELMAH 项目站点上的issue #217

于 2013-06-17T16:43:30.683 回答