【发布时间】:2017-05-09 11:48:39
【问题描述】:
我有一个 Web API 项目。我的端点之一允许进行字符串搜索,其中可能包含特殊字符。
[RoutePrefix("api/Search")]
[ValidateInput(false)] // this is *supposed* to allow us to search using "unsafe" characters, like %, & etc.
public class SearchController : ApiController
{
...
[HttpGet]
[Route("{searchValue}", Name = "GenericSearch")]
public async Task<IHttpActionResult> Search(string searchValue)
{
...
}
}
当我打电话给api/Search/fred 时,它按预期工作。
当我拨打api/Search/fred%25 时,我收到此错误:
[HttpException (0x80004005): 检测到来自客户端 (%) 的潜在危险 Request.Path 值。] System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +561 System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +54
尽管我的控制器用[ValidateInput(false)] 装饰,但根据我在其他地方找到的其他答案,我将requestValidationMode 添加到我的Web.config:
<system.web>
...
<httpRuntime requestValidationMode="2.0" />
</system.web>
我还需要什么其他的秘密开关?
【问题讨论】:
-
我很确定这仅适用于 MVC。但仅在我的手机 ATM 上。还会说,如果它不只是 MVC,那么您是否在方法上尝试过它而不是类?
-
根据这个stackoverflow.com/questions/5967103/…的回答尝试把它放在查询字符串中
-
@AndrewHarris AFAIK,WebAPI 不是 MVC 的衍生产品,只是带有一些不同的控制器和其他东西吗?
-
@GeoffJames stackoverflow.com/q/9698224/7077113
-
@AndrewHarris 啊,酷。必须是螺栓固定的东西之一。很高兴知道,谢谢:)
标签: c# asp.net-web-api