Answers:
在要允许HTML用于的控制器中,将以下属性添加到动作(发布)中:
[ValidateInput(false)]
编辑:根据查利诺评论:
在您的web.config中,设置使用的验证模式。参见MSDN:
<httpRuntime requestValidationMode="2.0" />
编辑2014年9月:根据sprinter252的评论:
您现在应该使用 [AllowHtml]
属性。请参阅下面的MSDN:
对于ASP.NET MVC 3应用程序,当您需要将HTML发布回模型时,请不要使用ValidateInput(false)来关闭“请求验证”。只需将[AllowHtml]添加到模型属性中,如下所示:
public class BlogEntry { public int UserId {get;set;} [AllowHtml] public string BlogText {get;set;} }
<httpRuntime requestValidationMode="2.0" />
在web.config文件中进行设置。
那么[AllowHtml]
属性之上的属性呢?
MetadataTypeAttribute
地工作,并且更可取,因为它只允许在单个字段上使用HTML,而不是整个对象。
添加到模型:
using System.Web.Mvc;
和你的财产
[AllowHtml]
[Display(Name = "Body")]
public String Body { get; set; }
从我的角度来看,这段代码是避免此错误的最佳方法。如果使用的是HTML编辑器,则不会受到安全性问题的限制。
尽管我[System.Web.Mvc.AllowHtml]
按照一些答案中的描述添加了有关属性,但我遇到了同样的问题。
就我而言,我有一个在 MVC验证发生之前UnhandledExceptionFilter
访问Request对象的类(因此AllowHtml不起作用),并且此访问引发了。[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
这意味着,访问Request对象的某些属性会隐式触发验证(在我的情况下是其Params
属性)。
MSDN上记录了防止验证的解决方案
若要对请求中的特定字段(例如,对输入元素或查询字符串值)禁用请求验证,请在获取商品时调用Request.Unvalidated方法,如以下示例所示
因此,如果您有这样的代码
var lParams = aRequestContext.HttpContext.Request.Params;
if (lParams.Count > 0)
{
...
更改为
var lUnvalidatedRequest = aRequestContext.HttpContext.Request.Unvalidated;
var lForm = lUnvalidatedRequest.Form;
if (lForm.Count > 0)
{
...
或仅使用Form
似乎不会触发验证的属性
var lForm = aRequestContext.HttpContext.Request.Form;
if (lForm.Count > 0)
{
...
如果您需要允许html输入动作方法参数(与“模型属性”相对),则没有内置的方法,但是您可以使用自定义模型绑定器轻松实现:
public ActionResult AddBlogPost(int userId,
[ModelBinder(typeof(AllowHtmlBinder))] string htmlBody)
{
//...
}
AllowHtmlBinder代码:
public class AllowHtmlBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
var name = bindingContext.ModelName;
return request.Unvalidated[name]; //magic happens here
}
}
在我的博客文章中找到完整的源代码和说明:https : //www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
例如,您可以使用[AllowHtml]
您的项目
[AllowHtml]
public string Description { get; set; }
使用此代码对您安装此程序包的库进行分类
Install-Package Microsoft.AspNet.Mvc
使用后 using
using System.Web.Mvc;