如何避免使用json<>获取“潜在危险请求”错误MVC3还是MVC4?

时间:2012-08-04 11:31:38

标签: asp.net-mvc asp.net-mvc-3

我正在使用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上看到了另一个像我的帖子,但它并没有真正解决这个问题。

注意我正在寻找可以应用于此操作的本地内容。我在网上看到了一些建议,但看起来如何处理不同的MVC版本之间存在混淆。是编码和解码数据的最佳方法,如果是,我该怎么做?

2 个答案:

答案 0 :(得分: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)
{

答案 1 :(得分:0)

public class MyModel{
  [AllowHtml]
  public string  Text{get;set;}
}

您需要在字段中添加[AllowHtml]属性。 另外,请确保您没有向Action添加FormCollection模型,您可以看到 https://stackoverflow.com/a/4866070/1431191