3

OData webAPI を使用して、param を使用してアクションを呼び出し、メタ情報なしで json にシリアル化してみてください。だから、私はタイプのオブジェクトを渡したい:

public class SomeRequest
{
    public RequestReason Reason { get; set; }
}

public enum RequestReason
{
    New,
    Dublicate
}

mdel を作成し、アクションを構成しました。

var action = modelBuilder.Entity<Member>().Action("SomeRequest");
action.Parameter<SomeRequest>("Info");
action.Returns<HttpResponseMessage>();
var model = modelBuilder.GetEdmModel();
configuration.EnableOData(model);

コントローラーにコードがあります:

[HttpPost]
public HttpResponseMessage RequestIDCard(int key, [FromBody]ODataActionParameters param)
{
    object value;
    param.TryGetValue("Info", out value);
///!!!!
}

そして、実際の型 SomeRequest で値を持つことを期待し、型をキャストして処理します...次に、ヘッダーを使用して POST 要求を作成します

コンテンツタイプ: application/json;json=light; charset=utf-8 Accept: application/json;odata=light

と体

{"情報":{"理由":1}}

しかし、「Newtonsoft.Json.Linq.JObject」タイプのオブジェクトを取得しましたが、キャストできないことを確認してください! しかし、オブジェクト タイプを int に変更すると、すべてが機能します :) WebAPI OData のバグですか、何か間違っていますか?

4

1 に答える 1

0

あなたの使い方にいくつか問題がありますが、

  1. 列挙型は、aspnet Web API OData の文字列にマップされます。したがって、リクエストの本文には、代わりに { "Reason" : 'Duplicate' を含める必要があります。
  2. Jen がすでに指摘しているように、application/json;odata=light はサポートされているメディア タイプではありません。「application/json;odata=minimalmetadata」または単に「application/json」を使用することをお勧めします。
  3. action.Returns< HttpResponseMessage > は役に立ちません。これにより、サービスの EDM モデルで HttpResponseMessage が複合型としてマップされます。マッピングがどのように見えるかはわかりません。一般に、構築中の EDM モデル内のモデルの型を公開する必要があります。モデルからより具体的なタイプを選択する必要があります。

    action.Returns< IDCard >();

于 2013-02-15T17:59:05.877 に答える