2

このリンクによると、Request.Unvalidatedを使用して、リクエストの検証をトリガーせずにフォームフィールドの生の値にアクセスできます(恐ろしいエラーメッセージ「潜在的に危険なRequest.Form ...」を参照してください)。残念ながら、私はそれを動作させることができませんでした。

Web.config

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />

ビューモデルの単純なフィールド:

// [AllowHtml] - even I tried this, it still did not work :(
public string Description { get; set; }

そしてコントローラーのアクション:

[HttpPost]
public ActionResult Edit([Bind(Prefix = "Edit")] EditModel model)
{
  string s = Request.Unvalidated.Form["Edit.Description"];
}

「潜在的に危険なRequest.Form...」というエラーがまだ表示されますが、なぜですか?グーグルを試しましたが、ASP.NETMVCの例はありませんでした。

ツールボックス:ASP.NET MVC 4プロジェクトを使用しており、.NET4.5およびVS2012を対象としています。

ありがとう、

更新:DescriptionプロパティでAllowHtmlを使用すると、Request.Unvalidatedが必要ない場合でも、問題が修正されました。以下の@webdeveloperの回答でコメントしたように、まだ問題があります。

4

4 に答える 4

8

このリンクを見てください:

彼らはあなたがそれがどのように機能するかを理解するのに役立ちます。

于 2012-10-10T18:19:33.670 に答える
1

webdeveloperの最初のリンクで説明されているように、リクエスト検証モードを2.0に設定する必要があるようです。これを試して:

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
于 2013-01-23T20:43:32.997 に答える
1

私は問題が@webdeveloperによってすでに解決されていることを知っています。ただし、の詳細についてはrequestValidationMode

例:2.0または4.0のいずれかになります。

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />

また

<httpRuntime targetFramework="4.5" requestValidationMode="4.0" />

このリクエストの検証は、ページに対してのみ有効になります。以下の内容はMSDNのリファレンスからのものです

  • 4.0(デフォルト)。HttpRequestオブジェクトは、HTTPリクエストデータにアクセスするたびにリクエスト検証をトリガーする必要があることを示すフラグを内部的に設定します。これにより、リクエスト中にCookieやURLなどのデータにアクセスする前にリクエストの検証がトリガーされることが保証されます。構成ファイル内のpages要素(存在する場合)または個々のページ内の@Pageディレクティブの要求検証設定は無視されます。

  • 2.0リクエストの検証は、すべてのHTTPリクエストではなく、ページに対してのみ有効になります。さらに、構成ファイル内のpages要素(存在する場合)または個々のページ内の@ Pageディレクティブの要求検証設定を使用して、検証するページ要求を決定します。

このプロパティに割り当てる値は、ASP.NETの特定のバージョンと一致するように検証されません。4.0より小さい数値(たとえば、3.7、2.9、または2.0)は、2.0として解釈されます。4.0より大きい数値は、4.0として解釈されます。

したがってrequestValidationMode="4.5"、最初に定義すると、に解釈されrequestValidationMode="4.0"ます。

于 2014-07-03T09:56:11.220 に答える
0

モデルバインダーによるこの問題。コードでは、プロパティ「Description」をモデルのビングから除外する必要があります。プロパティでhtmlを許可する別の方法として、ビューモデルで[AllowHtml]属性を適切に使用できます。

于 2020-05-06T05:12:47.660 に答える