AllowHtml 首先不适用于模型 - "potentially dangerous request"

AllowHtml does not work with model first - "potentially dangerous request"

我首先将 MVC 与模型一起使用。我在接受富文本输入的控制器上使用了 [ValidateInput(false)]。这很好用。现在我发现以下 post 允许我使用我更喜欢的 [AllowHtml] (post).

[MetadataType(typeof(YourEntityMetadata))]
public partial class YourEntityClass
{            
}   

public class YourEntityMetadata
{
    [AllowHtml]
    public string YourPropertyWithHtml { get; set; }
}

我试过了,但没用。出于测试原因,我在自动生成的模型中直接将 AllowHtml 添加到 属性 上,这也没有用。在这两种情况下,我都收到相同的错误“潜在危险请求...”

有问题的输入是来自 CKEditor 的简单富文本 <p> lorem <\p>。 控制器调用一个单独的函数,该函数执行实际写入以访问数据库,并首先访问模型 ModelContainer。

自动生成中是否有某些东西可能会阻止 [AllowHtml] 工作。控制器不直接访问或创建实体而是将字符串传递给另一个创建实体并将其保存到数据库的函数是否有问题?

编辑

我禁用了检查 XSRF 令牌的过滤器。我设置了请求验证模式:

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

我将控制器方法简化为:

public int SaveBlock(string blockCont)
{
    var testt = new ViewTest() { BlockContent = blockCont };
    return 0;
}

使用简单的视图模型:

    public class ViewTest
{
    [AllowHtml]
    public string BlockContent { get; set; }
}

而且请求仍然被标记为“潜在危险”错误。

考虑到有用的评论,我对该问题进行了更多阅读。我的困惑是,我认为数据注释是在将数据写入模型时应用的,而不是在控制器方法中接受数据时应用的。

当然,我将字符串发送到控制器并希望在我实际将其写入模型时对其进行验证的方法是错误的。可能是我想要的有点多了。

对于我的方法,我想尽可能地将我的数据模型与控制器分离(使用存储库),我想唯一的前进方向是发送到控制器的输入的视图模型.但是,就我而言,我想我会坚持对少数非 html 字符串输入进行编码,只让一个 html 输入进入数据库。