我正在尝试将这样的对象发送到我的REST API(使用asp net core构建)
{ "firstName":"tersü","lastName":"asda" }
这就是SoapUI的标题形式:
Accept-Encoding: gzip,deflate Content-Type: application/json:charset=UTF-16 Host: localhost:4004 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
但是,我的actionContext.ModelState始终无效,因为它无法与umlaute一起使用.例外情况如下:
Unable to translate bytes [FC] at index 35 from specified code page to
Unicode
如果有任何帮助,方法签名如下所示:
[ValidateUserData] public async Task<IActionResult> Update(string userId,[FromBody] UpdateUserRequest updateRequest)
基本上代码永远不会过去
if (!actionContext.ModelState.IsValid) { actionContext.Result = new BadRequestObjectResult(actionContext.ModelState); }
在[ValidateUserData]属性中
我在这里错过了什么?
解决方法
您正在发送以utf-16编码的字符串,但告诉(在Content-Type标头的字符集中)它是utf-8.
utf-8中tersü的字节是:
74,65,72,73,C3,BC
但是tersü(在utf-16中)包含字节(注意那里的FC):
74,FC,0
(检查in this fiddle)
所以它无法理解它.因此,要么在发送之前将字符串转换为客户端中的utf-8,要么将Content-Type字符集设置为utf-16.