我正在建立一个内容管理系统,允许我以外的人更新网站上的内容。
我有一个面向前的HTML表单,它通过AJAX将数据发送到控制器:

// CONTROLLER
[ValidateInput(false)]
public void CarAJAX()
{
    CarAdmin CA = new CarAdmin();
    CA.UpdateCar(System.Web.HttpContext.Current.Request);
}

此数据将具有HTML,因此我的模型中不断出现错误:
// MODEL
using System;
using System.Web;
using System.Web.Mvc;

namespace Site.Models
{
    public class CarAdmin
    {
        public String id { get; set; }
        [AllowHtml]
        public String HTML_Stuff { get; set; }

        public CarAdmin(){}

        public void UpdateCar(HttpRequest Request)
        {
            HTML_Stuff = Request.Form["HTML_Stuff"]; // <-- ERROR HAPPENS HERE!!!!!!

            // sanitation and validation

            String Select = String.Format("UPDATE Car Set HTML_Stuff = {0} WHERE id = {1}", HTML_Stuff, id);

            // Execute DB Command
        }
    }
}

如代码所示,当我试图将一个成员设置为具有html的请求变量时,会得到一个错误。
编辑:错误是“潜在的危险请求。检测到表单值”
我试过的是:
Change the validation mode in web.config,但我不想更改整个站点的验证,因为只有一个变量将具有html。
[AllowHtml]在模型中,但是我仍然得到相同的错误-好像[AllowHtml]什么也没做。
[ValidateInput(false)]在控制器中,类似于AllowHtml,它似乎没有任何影响。
我是不是丢了什么东西?

最佳答案

我也有同样的问题。”requestValidationMode=“2.0”是在web.config中设置的,[allowHTML]也是在正确的属性上设置的,我仍然得到错误“一个潜在的危险请求。检测到表单值…”。
但我注意到实际上调用了controller方法(我能够调试该方法),所以这意味着验证实际上已关闭。在调用堆栈中,我注意到围绕缓存的类重复出现,比如“system.web.caching.outputCacheModule”,这让我想到这与我关闭的整个控制器上的缓存有关,比如“[outputCache(nostore=true,duration=0)”。
基于此,我还尝试将缓存的位置设置为outputCacheLocation。没有,这就成功了。所以我最终得到了[OutputCache(nostore=true,duration=0,location=outputCacheLocation.none)]工作,最后没有验证,也没有失败我的请求。

08-07 12:44