2010-06-28 57 views
0

在ASP.net MVC 2中,如果动作的参数是模型,那么如何禁用验证以解除例如“潜在的从客户端检测到危险的Request.Form值(Post.Title =“<b> Title </b >”)。 “?如何在ASP.net MVC2中禁用验证,如果动作的参数是模型

例如,在MvcMusicStore(这是ASP.net MVC2的官方示范)中,以下代码负责创建新的专辑。而标题是它的一个属性。

[HttpPost] 
    public ActionResult Create(Album album) 
    { 
     ... 
    } 

但是如果我添加在标题文本框中输入一些敏感的代码,如“<b>标题</B >”,上述异常将被抛出。我试图添加[ValidateInput(false)]到这个动作,并且ValidateRequest =“false”到视图代码,他们都没有工作。

有没有人可以提供帮助?

更新: 由于我使用Visual Studio 2010和ASP.net 4.0,所有这些解决方案将无法工作,除非我补充一下:

<httpRuntime requestValidationMode="2.0" /> 

到web.config中。请参阅:https://stackoverflow.com/questions/2019843/a-potentially-dangerous-request-form-value-in-mvc-2-asp-net-4-0http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#_TOC4

然后出现一个新问题。如果我们必须回到2.0模式的请求验证,为什么微软添加这个新功能到ASP.net 4.0?有什么办法可以解决这个异常而无需回到2.0模式?

回答

0

我用[ValidateInput(false)]修饰了我的行为,它起作用。我也有这个在我的web.config(见here):

<pages validateRequest="false"> 

也许它可以在每个页面的基础设置?在我的网站中,可以完全全部关闭。

1

如果你看一下你所说,你会发现下面的解决方案错误消息下面的描述:

...为了让页面重写应用程序请求验证设置,设置在的httpRuntime配置requestValidationMode属性section requestValidationMode =“2.0”。例如:<httpRuntime requestValidationMode="2.0" />。设置此值后,可以通过在Page指令或<pages>配置部分中设置validateRequest =“false”来禁用请求验证。但是,强烈建议您的应用程序在这种情况下明确检查所有输入。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=153133

您提到您尝试添加validateRequest属性,但是您是否还尝试将requestValidationMode =“2.0”添加到web.config中的httpRuntime部分?这可能会诀窍。

+0

有什么办法可以处理这个异常而无需回到2.0模式? – user90547 2010-06-28 14:02:21

+0

@ user90547不,这是唯一的方法。 – jfar 2010-06-28 16:45:12

0

在MVC中,验证发生在标准ASP.net方法之前,因此上述答案是正确的。您必须添加到行动[ValidateInput(false)]。您在浏览器中看到的错误消息中给出的说明已过时。

相关问题