Web API中不接受%作为字符串参数的一部分

时间:2019-04-03 14:45:42

标签: angular asp.net-web-api asp.net-core-webapi http-get

我想向我的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       statusText:“未找到”       网址:“ http://localhost:31676/api/TokenTest/check-token-validation/96/TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D”        proto :HttpResponseBase

2 个答案:

答案 0 :(得分: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==,您将获得正确的结果:

enter image description here

但是始终建议使用url编码。

答案 1 :(得分:1)

您可以使用函数encodeURIComponent(yourstring)在URL中编码特殊字符。

然后将网址更改为http://localhost:31676/api/TokenTest/check-token-validation/96?parameterName=TCmBqAKPGVMlTQ2Exw%2FviQ%3D%3D