我试图将这样的对象发送到我的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
始终无效,因为它无法与变音符号一起使用。例外情况如下:
无法将索引35处的字节[FC]从指定的代码页转换为 Unicode的
如果有任何帮助,方法签名如下所示:
[ValidateUserData]
public async Task<IActionResult> Update(string userId, [FromBody] UpdateUserRequest updateRequest)
基本上代码永远不会过去
if (!actionContext.ModelState.IsValid)
{
actionContext.Result = new BadRequestObjectResult(actionContext.ModelState);
}
在[ValidateUserData]
属性
我在这里缺少什么?
答案 0 :(得分:9)
您发送的代码是utf-16
编码的字符串,但是告诉(Content-Type
标题字符集中)utf-8
。
tersü
中utf-8
的字节数为:
74,65,72,73,C3,BC
但是tersü
(在utf-16
中)包含字节(注意那里的FC
):
74,0,65,0,72,0,73,0,FC,0
(检查in this fiddle)
所以它无法理解它。因此,要么在发送之前将字符串转换为客户端中的utf-8
,要么将Content-Type
字符集设置为utf-16
。
答案 1 :(得分:2)
虽然Content-Type是charset UTF-8,但是接收到的字节代码FC表示扩展的ASCII字符252,它表示变音符号“ü”。
在UTF-8编码中,变音符号“ü”由两个字节组成。因此,给定的编码头与传输的数据之间存在不匹配。因此,您必须检查生成请求的代码。
答案 2 :(得分:0)
不是所提出问题的直接解决方案,而是相关问题的解决方案:
将Winforms应用程序从Net.4.0降级到Net.2.0时出现此错误消息(由于第三方表单控制问题)
在表单设计器中指定的每个ImageList对象实例都会受到影响。
我从RESX文件和Designer代码中剪切了所有此类实例,使其成为私有对象,并在Form_Load事件中进行了所需的初始化。
此后在Net.2.0或Net 4.0配置中没有问题。
答案 3 :(得分:-1)
在.rdl文件上使用SSRS时出现此错误。解决方案是我需要将文件另存为未签名的UTF-8文件,而不是已签名的UTF-8文件。这是在Visual Studio中执行的操作:
为我解决了这个问题,希望对您有所帮助!