を見てだから私はインターネット上で、そしてもちろんいくつかのより多くの検索ロリーのヒントの後、他の誰かがこの問題に遭遇した任意の提案取っている:
SignalR : use camel case
をしかし、解決策は私のために働いていません:/
私は同様の解決策を見つけましたが、オブジェクトが特定のライブラリから来た場合を除いて、デフォルトの契約リゾルバを常に持っています私たちのビューモデル - 。 https://blogs.msdn.microsoft.com/stuartleeks/2012/09/10/automatic-camel-casing-of-properties-with-signalr-hubs/
注:これは完璧なソリューションではありませんが、それはだから私は与えている既存のコードとうまく結びつきことをすべて一緒に新しい解決策を考え出した私のシナリオ
のための最高のを働いたものです私は問題です。
これを回避するもう1つの方法は、アプリにDefaultContractResolver
を使用させることです。 SignalRは今接続しますが、残りのアプリケーションは中断します。私が取り組んでいるソリューションでこれを軽減するために、2つの簡単な拡張メソッドを使用しました。
は、まず私はいつも
HttpResponseMessage
を返します
CamelCasePropertyNamesContractResolver
public static class HttpConfigurationExtensions
{
public static HttpConfiguration ToCamelCaseHttpConfiguration(this HttpConfiguration configuration)
{
var jsonFormatter = configuration.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
bool needToAddFormatter = jsonFormatter == null;
if (needToAddFormatter)
{
jsonFormatter = new JsonMediaTypeFormatter();
}
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
if (needToAddFormatter)
{
configuration.Formatters.Add(jsonFormatter);
}
return configuration;
}
}
既存のWeb APIのためのフォーマッタを交換するHttpConfiguration
クラスを拡張し、私は私がやった方法でそれについては行くことができる理由です。 API呼び出し
[Route("")]
[HttpPost]
public async Task<HttpResponseMessage> CreateSetting(Setting setting)
{
// the response object is basically the data you want to return
var responseData = await ...
return Request.CreateResponse(responseData.StatusCode, responseData);
}
の
例私はすべてのAPI呼び出しがRequest.CreateResponse(...)
メソッドを使用していた気づきました。私がすぐに見ていないのは、マイクロソフトが実際にすべての必要なオーバーロードを予知していたということです。つまり、私自身がRequest.CreateResponse(...)
の実装を行うことができませんでした。
なぜそれがMakeResponse
public static class HttpRequestMessageExtensions
{
public static HttpResponseMessage MakeResponse<T>(this HttpRequestMessage request, T response) where T : Response
{
return request.CreateResponse(response.StatusCode, response,
request.GetConfiguration().ToCamelCaseHttpConfiguration());
}
}
と呼ばれていますということResponse
のクラスは、あなたのAPIが返すようにするデータ構造です。私たちのAPIでは、それらはすべてこれらの構造の1つにラップされています。これにより、Slack API上の応答と同様の応答を持つAPIが生成されます。
は、だから今のコントローラはすべて、これはあなたが要求に応答するようにサーバーを設定している方法と設定の問題であるRequest.MakeResponse(responseData)
を使用しています。 –