asp.net core MVC中URL编码问题

目的:要在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传递带有保留字符(/)的参数呢?


互换的青春
浏览 1222回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP