2010-06-18 77 views
3

我正在研究一個簡單的.Net 4.0 web服務。我創建了一個方法,它接受一個字符串輸入。我以調試模式運行項目,以便在瀏覽器中打開一個頁面,我可以輸入一個輸入並調用該服務的方法。不幸的是我收到以下錯誤:Web服務不接受輸入

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (xmlData="<?xml version="1.0" ..."). 
    at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) 
    at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) 
    at System.Web.HttpRequest.get_Form() 
    at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request) 
    at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
    at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

我嘗試添加

<pages validateRequest="false" /> 

到web.config。這是行不通的。

我該怎麼辦?

回答

7

我找到了解決辦法:

在.NET 4中必須添加下<的System.Web>以下行:

<httpRuntime requestValidationType="MyService.CustomRequestValidator" /> 

的CustomRequestValidator類是你要自己添加了驗證。然後,只需覆蓋布爾IsValidRequestString()方法,並返回真正消除驗證:

/// <summary> 
/// Validates the input based on some custom rules 
/// </summary> 
public class CustomRequestValidator : RequestValidator 
{ 
    /// <summary> 
    /// Validates a string that contains HTTP request data. 
    /// </summary> 
    /// <param name="context">The context of the current request.</param> 
    /// <param name="value">The HTTP request data to validate.</param> 
    /// <param name="requestValidationSource">An enumeration that represents the source of request data that is being validated. The following are possible values for the enumeration:QueryStringForm CookiesFilesRawUrlPathPathInfoHeaders</param> 
    /// <param name="collectionKey">The key in the request collection of the item to validate. This parameter is optional. This parameter is used if the data to validate is obtained from a collection. If the data to validate is not from a collection, <paramref name="collectionKey"/> can be null.</param> 
    /// <param name="validationFailureIndex">When this method returns, indicates the zero-based starting point of the problematic or invalid text in the request collection. This parameter is passed uninitialized.</param> 
    /// <returns> 
    /// true if the string to be validated is valid; otherwise, false. 
    /// </returns> 
    protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) 
    { 
     // Set a default value for the out parameter. 
     validationFailureIndex = -1; 

     return true; 

     // // All other HTTP input checks are left to the base ASP.NET implementation. 
     // return base.IsValidRequestString(
     //          context, 
     //          value, 
     //          requestValidationSource, 
     //          collectionKey, 
     //          out validationFailureIndex);    
    } 
} 

}