このようなオブジェクトを私の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]
属性
ここで何が欠けていますか?
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
(それをチェックしてください このフィドルで )
だからそれを理解することはできません。したがって、送信する前にクライアントで文字列をutf-8
に変換するか、Content-Type
文字セットをutf-16
に設定します。
Content-Typeは文字セットUTF-8ですが、受信したバイトコードFCは、ウムラウト "ü"を表す拡張ASCII文字252を示します。
UTF-8エンコーディングでは、ウムラウト「ü」は2バイトで構成されます。そのため、指定されたエンコードヘッダーと送信データの間に不一致があります。したがって、リクエストを生成するコードを確認する必要があります。
.rdlファイルでSSRSを操作すると、このエラーが発生しました。解決策は、署名付きのUTF-8ファイルではなく、署名なしのUTF-8ファイルとしてファイルを保存する必要があることでした。 Visual Studioでこれを行う方法を次に示します。
これで問題が解決しました。お役に立てば幸いです。