2

Jsonを使用して、更新情報を次のコントローラーアクションに送信しています。

    [HttpPost]
    public JsonResult JsonUpdate(string pk, string rk, string fld, string val) {
        Content content = null;
        try {
            if (fld == "TempRowKey") {
                content = contentService.Get(pk, rk);
                rk = utilityService.DotFormatToRowKey(val);
                contentService.UpdateRowKey(content, rk, User.Identity.Name);
            } else {

問題の原因となっているのはMVCの追加の保護であることに気付きましたが、val引数でHTMLコードを渡すことができる必要があり、次のエラーが発生します。

A potentially dangerous Request.Form value was detected from the client (val="...e HashMap <K,V>, LinkedHashMap..."). 

は管理者が入力した有効なテキストであることに注意してください。この画面は管理者のみが使用するため、フィールドを保護しなくても大丈夫です。

MVC2、3、4の間にいくつかの変更があったようです。

MVC3とMVC4でこの問題を回避する方法は何ですか。私のようなstackoverflowに関する別の投稿があるのを見ましたが、実際には問題に対処していません。

このアクションだけに適用できるローカルなものを探していることに注意してください。Webでいくつかの提案を見ましたが、異なるMVCバージョンでこれを処理する方法の間に混乱があるようです。データをエンコードおよびデコードするための最良の方法はありますか?もしそうなら、どうすればそれを行うことができますか?

4

2 に答える 2

3
[ValidateInput(false)]
public JsonResult JsonUpdate(string pk, string rk, string fld, string val)
{
    ...

ただし、次のようなこともできるはずです。

public class MyJsonUpdateModel
{
    public string pk { get; set; }
    public string rk { get; set; }
    public string fld { get; set; }

    [AllowHtml]
    public string val { get; set; }
}

// [ValidateInput(false)] not needed because model states HTML is allowed
public JsonResult JsonUpdate(MyJsonUpdateModel model)
{
于 2012-08-04T11:37:17.177 に答える
0
public class MyModel{
  [AllowHtml]
  public string  Text{get;set;}
}

[AllowHtml]属性をフィールドに追加する必要があります。また、FormCollectionモデルをアクションに追加しないようにしてください 。https: //stackoverflow.com/a/4866070/1431191を参照してください。

于 2012-12-24T23:12:39.430 に答える