5

エラーを記録するために、mvc プロジェクトで ELMAH を使用しています。エラーが記録されていないことがあることに気付きました。そのため、ステートメントを try..catch でラップして呼び出しErrorSignal.FromCurrentContext().Raise(ex);ましたが、その特定のエラーについては何も記録されません。そこで、ELMAH ソース コードにステップ インしようとしました (Reflector VS アドインを使用)。そして、エルマでこの例外を見ました:

 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 プロジェクト サイトの問題 #217を参照してください。

于 2013-06-17T16:43:30.683 に答える