【问题标题】:% not accepted as part of the string parameter in Web API% 不被接受为 Web API 中字符串参数的一部分
【发布时间】:2019-08-25 03:34:45
【问题描述】:
我想向我的 Web API 端点发送一个字符串参数。字符串是:TCmBqAKPGVMlTQ2Exw/viQ==,所以我们看到它包含一个/。我正在编码这个字符串,现在值是TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D,但我仍然无法到达 API 端点。
这是我得到的错误:
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure response for http://localhost:31676/api/TokenTest/check-token-validation/96/TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D:
404 未找到”
名称:“HttpErrorResponse”
好的:假的
状态:404
状态文本:“未找到”
网址:“http://localhost:31676/api/TokenTest/check-token-validation/96/TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D”
原型:HttpResponseBase
【问题讨论】:
标签:
angular
asp.net-web-api
asp.net-core-webapi
http-get
【解决方案1】:
您可以使用函数encodeURIComponent(yourstring) 对URL 中的特殊字符进行编码。
并将 Url 更改为http://localhost:31676/api/TokenTest/check-token-validation/96?parameterName=TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D
【解决方案2】:
如果你使用Attribute routing,你可以试试下面的代码示例:
[Route("api/[controller]")]
[ApiController]
public class TokenTestController : ControllerBase
{
[HttpGet]
[Route("check-token-validation/{id}")]
public ActionResult<IEnumerable<string>> CheckTokenValidation(int id, string para)
{
return new string[] { "value1", "value2" };
}
}
如果请求是https://localhost:xxxx/api/TokenTest/check-token-validation/96?para=TCmBqAKPGVMlTQ2Exw/viQ==,你会得到正确的结果:
但总是建议使用 url 编码。