2

HttpRequestValidationExceptions (たとえば、html がフォーム フィールドに挿入されたとき)を処理し、送信後にユーザーをページに戻し、問題を強調する意味のあるエラーを表示したいと考えています。

たとえば、ログイン ページで、ユーザーがユーザー名フィールドに無効な文字を入力した場合、HttpRequestValidationExceptionをキャッチし、ユーザー名フィールドが強調表示された状態でユーザーをログイン ページに戻したいと考えています。

OnExceptionメソッドを使用して、HandleErrorAttributeから継承するクラスでエラーをキャッチできます。

ここから (または他の方法で) Controller * ModelState * を取得してエラーを追加する方法はありますか?

注: 検証をオフにしたり、エラー ページにリダイレクトしたりしたくありません。

例えば:

public override void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpRequestValidationException)
        {
            ModelStateDictionary ModelState = <...>
            ModelState.AddModelError("Error", "Invalid chars");
            filterContext.HttpContext.Response
            filterContext.ExceptionHandled = true;
            HttpContextBase HttpContext = filterContext.HttpContext;
            HttpContext.Response.Redirect(HttpContext.Request.Path);

            return;
        }
}

あなたが私に与えることができる助けを前もって感謝します!

4

1 に答える 1

1

をキャプチャして処理する代わりに、データアノテーションと、必要な検証ルールを含む独自のカスタムデータアノテーションHttpRequestValidationExceptionを使用して、モデルのプロパティを装飾することができます。良い例については、この回答を参照してください。[AllowHtml]

モデルのプロパティは次のようになります。

[AllowHtml]
[DisallowHtml]
public string SomeProperty{ get; set; }

これは少しばかげているように見えますが、これまでのところ、これは私が遭遇した中で最もクリーンなソリューションです。

于 2011-12-16T14:58:44.767 に答える