使用WIF时,我也收到了请求验证错误。我被正确地发送到STS,但在回来的路上,我得到了这个验证错误。
我遵循了所有指示。
<httpRuntime requestValidationMode="2.0" />
检查!
[ValidateInput(false)]
检查!
<pages validateRequest="false" >
检查!
我尝试了一个自定义验证器,但它永远不会被实例化。
错误堆栈:
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (wresult="trust:RequestSecuri...").]
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +11396740
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +82
System.Web.HttpRequest.get_Form() +212
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +26
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +145
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +108
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
有什么建议吗?
答案 0 :(得分:26)
<httpRuntime requestValidationMode="2.0"/>
之后添加
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
同样在mvc3中有一个AllowHtml属性
[AllowHtml]
public string Property{ get; set; }
这里有一些有用的链接
答案 1 :(得分:3)
如果您运行的是.NET 4.5,请参阅this answer,它利用了ASP.NET内置的更新请求验证程序。
答案 2 :(得分:0)
您可以按照ASP.NET : A potentially dangerous Request.Form value was detected from the client将两个构造放在system.web部分中。
请注意,这是标准的ASP.NET功能。它没有连接到WIF。
答案 3 :(得分:0)
在MVC 3中(不确定2)你可以在global.asax.cs中添加一个全局过滤器,例如
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ValidateInputAttribute(false));
}
加上以下内容应该允许所有数据进入并正确安全地显示它我认为:
<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"/>
在web.config中使用并使用(注意冒号):
<%: Model.Something %>
或在Razor中:
@Model.Something
在某些情况下使用Javascript:
@Html.Raw(Ajax.JavaScriptStringEncode(Model.Something))