如何让 [AllowHtml] 和 [CaptchaVerify] 一起工作?

How to make [AllowHtml] and [CaptchaVerify] work together?

我被困在了第 22 个问题上。我有一个问题,这两个属性不能一起工作。如果我从控制器操作中删除 [CaptchaVerify] 属性,我的 属性 上的 [AllowHtml] 属性会起作用。

我得到

A potentially dangerous Request.Form value was detected from the client

例外。

我该如何解决这个问题?


这是我的 属性 应该允许 html:

[AllowHtml]
[Required(ErrorMessage = "Please enter a comment.")]
public string CommentText
{
    get; set;
}

我的视图如下所示(我已将其截断以用于此示例):

@using CaptchaMvc.HtmlHelpers

@using (Html.BeginForm("Article", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.CommentText, new { @class = "form-control" })
    @Html.Captcha("Refresh", "Enter the phrase shown above", 4, "Captcha image is required.", false)
    <input type="submit" value="Post" />
}

我的控制器看起来像这样:

[HttpPost]
[CaptchaMvc.Attributes.CaptchaVerify("Captcha is not valid")]
public async Task<ActionResult> Article(ArticleModel model)
{
    // Check the captcha.
    if (ModelState["CaptchaInputText"] != null && ModelState["CaptchaInputText"].Errors.Count > 0)
    {
        ViewBag.CaptchaError = "Please fill in the text above";
    }

    // Rest of my action
}

我还在做一些研究,但现在我找到了这个解决方案,更改网络配置:

进行此更改将禁用所有表单请求验证,因此我强烈不推荐

我也尝试添加全局过滤器,但没有成功:

  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
     filters.Add(new ValidateInputAttribute(false));
  }

这个库是开源的,尝试下载并调试代码

我下载了源码,找到了解决办法

不幸的是,他们需要更改源代码 https://captchamvc.codeplex.com/workitem/11

您可以按照上面link下载源码自行修改,或者等待更新源码。