Rab*_*bbi 118 validation asp.net-mvc validate-request
如何允许用户使用ASP.net MVC将HTML输入到特定字段.
我有一个很长的表单,有许多字段映射到控制器中的这个复杂对象.
我想创建一个字段(描述)允许HTML,我将在稍后的时间内完成我自己的卫生设施.
Kel*_*sey 159
在控制器中添加以下属性操作(post),以允许HTML:
[ValidateInput(false)]
Run Code Online (Sandbox Code Playgroud)
编辑:根据查理诺的评论:
在您的web.config中设置使用的验证模式.请参阅MSDN:
<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)
编辑2014年9月:根据sprinter252评论:
您现在应该使用该[AllowHtml]属性.从MSDN中查看以下内容:
对于ASP.NET MVC 3应用程序,当您需要将HTML发布回模型时,请不要使用ValidateInput(false)来关闭请求验证.只需将[AllowHtml]添加到您的模型属性中,如下所示:
Run Code Online (Sandbox Code Playgroud)public class BlogEntry { public int UserId {get;set;} [AllowHtml] public string BlogText {get;set;} }
cry*_*yss 129
什么[AllowHtml]上述财产属性?
小智 42
添加到模型:
using System.Web.Mvc;
Run Code Online (Sandbox Code Playgroud)
并对你的财产
[AllowHtml]
[Display(Name = "Body")]
public String Body { get; set; }
Run Code Online (Sandbox Code Playgroud)
从我的观点来看这个代码避免了这个错误.如果您使用的是HTML编辑器,则不会出现安全问题,因为它已经受到限制.
添加[AllowHtml]特定属性是推荐的解决方案,因为有大量博客和评论暗示降低安全级别,这应该是不可接受的.
通过添加它,MVC框架将允许命中Controller并执行该控制器中的代码.
但是,它取决于您的代码,过滤器等,如何生成响应以及是否存在可能触发另一个类似错误的进一步验证.
无论如何,添加[AllowHtml]属性是正确的答案,因为它允许在控制器中反序列化html.viewmodel中的示例:
[AllowHtml]
public string MessageWithHtml {get; set;}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,虽然我添加[System.Web.Mvc.AllowHtml]了一些答案中描述的有关财产.
在我的情况下,我有一个UnhandledExceptionFilter类在 MVC验证发生之前访问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)
{
...
Run Code Online (Sandbox Code Playgroud)
改为
var lUnvalidatedRequest = aRequestContext.HttpContext.Request.Unvalidated;
var lForm = lUnvalidatedRequest.Form;
if (lForm.Count > 0)
{
...
Run Code Online (Sandbox Code Playgroud)
或者只是使用Form似乎没有激活验证的属性
var lForm = aRequestContext.HttpContext.Request.Form;
if (lForm.Count > 0)
{
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99128 次 |
| 最近记录: |