1

私は MVC アプリケーションを開発しており、現在テストしています。

<test>住所フィールドのデータベースに挿入しようとしています。アングラーブラケットが含まれているため、エラーが発生しています。そのために、コントローラーで以下のコードを使用します。

[HttpPost]
public ActionResult Create(Employee employee)
{
    if (ModelState.IsValid)
    {
        employee.Address.Replace("<", "&lt;").Replace(">", "&gt;");
        db.Employees.Add(employee);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    ViewBag.ReportsToId = new SelectList(db.Employees, "Id", "FirstName", employee.ReportsToId);
    return View(employee);
}

しかし、カーソルはこのコードに来ませんでした。置換コードをどこに書くか?
カーソルがそのコードに来る前に、エラーが発生しています:

潜在的に危険な Request.Form 値がクライアント (アドレス = "<test>") から検出されました。

4

3 に答える 3

2

同様の質問については、この回答をお読みください。

結論:プロパティ[AllowHtml]に対して属性を使用するAddressか、web.config を変更して requestValidationMode 2.0 を使用します。

<configuration>
   <system.web>
     <httpRuntime requestValidationMode="2.0" />
   </system.web>
   <pages validateRequest="false">
   </pages>
</configuration>
于 2012-08-28T07:46:35.277 に答える
2

employee.Address.Replace("<", "&lt;").Replace(">", "&gt;");に変更employee.Address = employee.Address.Replace("<", "&lt;").Replace(">", "&gt;");

このようにして、文字列を取得し、および記号employee.Addressを置き換えてから、文字列を に保存します。<>employee.Address

また、パーツの前にある必要がある場合もありますif (ModelState.IsValid)

于 2012-08-28T08:11:05.143 に答える
1

コードには、解決しなければならない 2 つの問題があります。

まず、あなたが指摘したように、エラー:

A potentially dangerous Request.Form value was detected from the client (Address ="<test>").

このエラーは、セキュリティのために、MVC がそのような文字列 (HTML 要素のようなもの) をデフォルトでアクション メソッドに送信することを許可していないために発生します。これは、ユーザーが危険な入力を送信してサイトを添付するのを防ぐためです。たとえば、 ではなく、alert('hahaha') と入力できます。その入力をエンコードしない場合、このアドレス フィールドを含むページにアクセスするすべての人にアラート ボックスが表示されます。そのため、デバッグ時に「コードの置換」に到達できず、このエラーのためにメソッド全体が実行されません。

とはいえ、この最初のエラーを解決するには多くのオプションがありますが、アクション メソッドに ValidateInput 属性を追加するだけで済みます。

[HttpPost]
[ValidateInput(false)]
public ActionResult Create(Employee employee)

これを行うことで、ある時点でその危険な入力をエンコードすることを信頼するように MVC に伝えます。そして、Replace コードによってそれを行っています。それは結構です。ただし、 @yourTable.Address を使用してビューでデータをレンダリングするだけの場合は、アクション コードで < と > をわざわざ置き換える必要はありません。@yourTable.Address 構文を使用してデータをレンダリングする場合、MVC Razor エンジンがエンコードを行います。

于 2012-08-28T23:50:12.283 に答える