2

(フォームフィールドにhtmlが挿入された場合など)HttpRequestValidationExceptionsを処理して、投稿後にユーザーに返信して意味のあるエラーを表示して問題を強調表示します。HttpRequestValidationExceptionを処理し、AddModelErrorを使用して意味のあるエラーを返すにはどうすればよいですか?

は例えば、ログインページで、ユーザーがユーザー名フィールドにいくつかの無効な文字があれば、私はHttpRequestValidationExceptionをキャッチし、ユーザー名フィールドが強調表示されたログインページにユーザーを返すようにしたいと思います。

私はonExceptionを方法を使用してHandleErrorAttributeから継承したクラスでエラーをキャッチすることができます。

私はエラーを追加するコントローラ * に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; 
     } 
} 

ありがとう!

答えて

0

をキャプチャして処理する代わりに、モデルのプロパティを[AllowHtml] data annotationで修飾して、独自のカスタムdata annotation(必要な検証ルールが含まれています)を付けることができます。良い例は、this answerを参照してください。少し愚かに見える

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

を、これまでのところ、それは私が遭遇したクリーンなソリューションです:

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

+0

ありがとうございました!これは間違いなく彼らが私にとって最善の方法であるように見えます。私が指摘したサンプルの答えを見ていきます。 – Paul

関連する問題