WebApi和Ampersands的名字

时间:2016-02-18 21:57:03

标签: angularjs asp.net-web-api routing

所以我的有角度的网站有一个带有以下方法的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

0 个答案:

没有答案