WebApiの差別化された結合の結果からクリーンjsonを返すのが最も簡単な方法は何ですか?このユースケースは、ビジネスだけではなくHTTPエラーのために使用さロジック等のためのものである - それらは、パイプラインで処理を受けると(404、500、等)。例えばF#WebApiは、識別されたユニオンから正しくフォーマットされたjsonを返します。
通常通りユーザに返さ取得:
type ServiceResult<'a> = { Message:string; Payload:'a }
type ServiceResponse<'a> =
| Success of ServiceResult<'a>
| Fail of ServiceResult<string>
戻り値次のいずれかの
{
"Case": "Fail",
"Fields": [
{
"Message": "Error performing business logic, your x is not in the y.",
"Payload": "I just couldnt do it"
}
]
}
...か...私はSERVを持っていると思い
{
"Case": "Success",
"Fields": [
{
"Message": "",
"Payload": { "FirstName": "Johnny", "LastName":"Smith" }
}
]
}
氷の結果は次のように返さ:
{
"Message": "",
"Payload": { "FirstName": "Johnny", "LastName":"Smith" }
}
...か...
{
"Message": "Error during operation due to spite.",
"Payload": "I just couldnt do it"
}
私はIdiomaticDuConverterを試してみました: https://gist.github.com/isaacabraham/ba679f285bfd15d2f53e
が、それは仕事をdidntの。私が見た中で最も近いのはMicrosoft.FSharpLu.Jsonですが、パイプラインにプラグインするMediaTypeFormatterはありません。
私はLuを使用して独自のMediaTypeFormatterを作成できますが、もっと簡単な方法(Json.Netの一部のオプションがありません)が必要なように感じます。
正しい方向に向けることができますか?あなたは、単にケースのラベルをスキップして、ネストされたServiceResult
にシリアライズを委任するでしょう、あなたのServiceResponse
タイプにcustom JSON.NET serializerを書くことができます
私の質問がもう少し明確になるように更新しました。成功/失敗はhttp/server/restの失敗ではなく、ビジネスロジックの失敗です。しかし、あなたは私の問題を修正した、私はちょうど結果をIHttpActionResultにキャストする必要があった。 – schmoopy