我无法使 ValidateInput(False) 工作 - 从客户端检测到潜在危险的 Request.Form 值

2024-05-20

我尝试了很多组合,但无法在此代码块上关闭验证

[ValidateInput(false)]
    public ActionResult aSavePageCopy()
    {
        aLoggedIn();
        int id = Convert.ToInt32(Request.Form["id"]);
        PagesDataContext pdc = new PagesDataContext();
        Page p = pdc.Pages.Single(row => row.ID == id);

        p.PageCopy = Request.Form["PageCopy"];

        pdc.SubmitChanges();

        return Redirect("/Admin/aViewPages");
    }

看来这对其他人有效,所以我不明白我在这里缺少什么。我得到的错误是从客户端检测到潜在危险的 Request.Form 值


你可以使用FormCollection这是安全访问而不是Request.Form(但请不要使用它,请参阅下文以了解问题的真正解决方案):

[ValidateInput(false)]
public ActionResult aSavePageCopy(FormCollection fc)
{
    aLoggedIn();
    int id = Convert.ToInt32(fc["id"]);
    PagesDataContext pdc = new PagesDataContext();
    Page p = pdc.Pages.Single(row => row.ID == id);

    p.PageCopy = fc["PageCopy"];

    pdc.SubmitChanges();

    return Redirect("/Admin/aViewPages");
}

当然,这绝对是一种荒谬且糟糕的解决问题的方法。正确的方法是使用视图模型(当然):

public class MyViewModel
{
    public int Id { get; set; }
    public string PageCopy { get; set; }
}

进而:

[ValidateInput(false)]
public ActionResult aSavePageCopy(MyViewModel model)
{
    aLoggedIn();
    PagesDataContext pdc = new PagesDataContext();
    Page p = pdc.Pages.Single(row => row.ID == model.Id);

    p.PageCopy = model.PageCopy;

    pdc.SubmitChanges();

    return Redirect("/Admin/aViewPages");
}

或者,如果您使用 ASP.NET MVC 3 并且希望仅对视图模型上的单个属性禁用验证,而不是对整个请求禁用验证,您可以使用以下内容装饰此视图模型属性:[AllowHtml]属性:

public class MyViewModel
{
    public int Id { get; set; }
    [AllowHtml]
    public string PageCopy { get; set; }
}

然后你就不再需要[ValidateInput(false)]您的操作的属性:

public ActionResult aSavePageCopy(MyViewModel model)
{
    aLoggedIn();
    PagesDataContext pdc = new PagesDataContext();
    Page p = pdc.Pages.Single(row => row.ID == model.Id);

    p.PageCopy = model.PageCopy;

    pdc.SubmitChanges();

    return Redirect("/Admin/aViewPages");
}

我们不仅解决了问题,而且正如您所看到的,您不再需要在控制器操作中编写任何管道代码来解析整数和模型绑定器的作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法使 ValidateInput(False) 工作 - 从客户端检测到潜在危险的 Request.Form 值 的相关文章