我不能让ValidateInput(假)的工作 - 从客户端检测到有潜在危险的Request.For

2019-09-21 09:14发布

我已经尝试了这么多的组合,但不能得到验证关闭该代码块

[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值

Answer 1:

你可以使用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)]在你的action属性:

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");
}

不仅如此,我们已经解决了这个问题,但你可以看到你不再需要写在你的控制器操作的任何管道代码围绕整数和东西是模型绑定的角色解析。



文章来源: I can't make ValidateInput(False) work - A potentially dangerous Request.Form value was detected from the client