所以我的有角度的网站有一个带有以下方法的webapi。
[Route("items/{itemName}")]
public object GetMcguffinsByItem(string itemName)
{
return _mcguffinsService.GetAllByItemName(itemName);
}
但是,项目名称可以将&符号作为有效字符。但是,当尝试使用具有&符号的项目时,该方法将返回400 badrequest。
我不确定如何解决这个问题。
要获得更多验证:我的印象是编码和使用%26都需要将&符号传递给URI的一部分。在搜索我的问题时,这似乎是一个常见的答案。我已经排除了角度,因为我可以验证它是否正确构建了字符串,其他名称产生了所需的结果。
javascript方法encodeURIComponent()后跟使用angular service对项目名称进行双重编码,并返回404.
编辑: 样本输入: A& B 266 编码后: A%26B%20266
控制台: angular.js:10722获取http://localhost:60894/api/v1/mcguffins/items/A%26B%20266 404(未找到)
直接在api上使用浏览器使用相同的输入会出现此错误:
[HttpException (0x80004005): A potentially dangerous Request.Path value was detected from the client (&).]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +11944671
System.Web.PipelineStepManager.ValidateHelper(HttpContext context) +55