Вы можете получить более детальный контроль над этим, установив атрибут requestValidationType
элемента httpRuntime
в пользовательский тип, который наследуется от System.Web.Util.RequestValidator
и переопределяет IsValidRequestString
.
К сожалению, этоне является частью конвейера WebAPI, поэтому не может напрямую проверять такие вещи, как фильтры действий (например, атрибуты в методах контроллера).
Однако, если вам особенно важны поля проверки формы, средство проверки неНе вызывайте их до тех пор, пока вы не получите к ним доступ, что происходит после запуска фильтров действий, поэтому вы можете отказаться от проверки с помощью атрибута, создав классы, подобные следующим ...
public class AllowFormHtmlAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
HttpContext.Current.Items["AllowFormHtml"] = true;
}
}
public class CustomRequestValidator : RequestValidator
{
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
{
if (context.Items["AllowFormHtml"] as bool? == true && requestValidationSource == RequestValidationSource.Form)
{
validationFailureIndex = 0;
return true;
}
return base.IsValidRequestString(
context, value, requestValidationSource, collectionKey, out validationFailureIndex);
}
}
..Затем просто аннотируйте ваш метод контроллера с помощью [AllowFormHtml]
Однако, если вы обращаетесь к полям формы непосредственно из HttpRequest, проще использовать HttpRequest.Unvalidated
, что обходит проверку.