目的:要在URL中传递一个参数到服务端。
但是name
参数中有保留字符/
,所以先用UrlEncode
进行编码。
测试代码如下:
[Fact]public async void GetByName_TestAsync(){ var name = WebUtility.UrlEncode("aa/bbc"); var response = await Client.GetAsync($"api/users/{name}"); var user = await response.Content.ReadAsAsync<UserDto>(); user.Should().NotBeNull(); }
服务端API:
[HttpGet("{name}")]public async Task<UserDto> Get(string name){ return await _userAppService.GetUserByNameAsync(name); }
结果查不到name
=aa/bbc
的user。
通过debug发现,请求的结果是404,本来以为是MVC解码了URL再进行路由匹配,因此请求的路径就变成了aa/bbc
。但通过在浏览器中发起请求,就可以等到编码后的值aa%2Fbbc
,所以判断这是HttpClient的问题,它在发起请求之前对URL作了手脚。
那么如何通过URL传递带有保留字符(/
)的参数呢?