我正在构建一个内容管理系统,允许我以外的人更新网站上的内容.
我有一个面向前面的HTML表单,通过AJAX将数据发送到控制器:
// CONTROLLER
[ValidateInput(false)]
public void CarAJAX()
{
CarAdmin CA = new CarAdmin();
CA.UpdateCar(System.Web.HttpContext.Current.Request);
}
Run Code Online (Sandbox Code Playgroud)
这些数据将包含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
}
}
}
Run Code Online (Sandbox Code Playgroud)
如代码所示,当我尝试将成员设置为等于具有HTML的请求变量时,我收到错误.
编辑:错误是'检测到潜在危险的Request.Form值'
这是我尝试过的:
更改web.config中的验证模式,但是当只有一个变量具有HTML时,我不想更改整个站点的验证.
[AllowHtml]
在模型中,然而我仍然得到相同的错误 - 好像[AllowHtml]
什么都没做.
[ValidateInput(false)]
在控制器中,类似于AllowHtml
,它似乎没有任何影响.
我在这里错过了什么吗?
小智 12
我有同样的问题."requestValidationMode ="2.0""在web.config中设置,[AllowHtml]也设置在适当的属性上,我仍然收到错误"检测到潜在危险的Request.Form值...".
但我观察到实际上调用了控制器方法(我能够调试该方法)所以这必然意味着验证实际上是关闭的.在调用堆栈中,我注意到反复出现类似于"System.Web.Caching.OutputCacheModule"的缓存类,这让我想到这与我在整个控制器上关闭的缓存有关,就像这样" [OutputCache( NoStore = true,持续时间= 0)]".
基于此,我尝试将缓存的位置设置为OutputCacheLocation.None,这就是诀窍.所以我最终使用[OutputCache(NoStore = true,Duration = 0,Location = OutputCacheLocation.None)] 工作,最后没有验证并且没有使我的请求失败.
归档时间: |
|
查看次数: |
3322 次 |
最近记录: |