3

WebApi を使用して文字列とバイナリ データを受け取る必要があります。この方法でコントローラーを作成しました:

    [HttpPost]
    public void Post(byte[] buffer)
    {
        // Some code goes here
    }

ルーティングは次のとおりです。

    routes.MapHttpRoute(
        name: "CuscarD95B",
        routeTemplate: "D95B/{controller}",
        defaults: new { buffer = RouteParameter.Optional },
        constraints: new { controller = @"Cuscar" }

データを投稿しようとすると、バッファは常にバイト [0] (長さゼロの配列) になります。コントローラにデータが渡されていません。

どんな助けでも大歓迎です。

ありがとう。

4

7 に答える 7

21

本体のデシリアライズに苦労したことがある場合は、手動で実行して、実際に正しく送信されているかどうかを確認してください。

[HttpPost]
public void Post()
{
    string body = Request.Content.ReadAsStringAsync().Result;
}
于 2012-11-08T16:03:41.470 に答える
2

JsonオブジェクトをHttpPostメソッドで渡し、動的オブジェクトで解析しました。それはうまくいきます。これはサンプルコードです:

ajaxPost:
...
Content-Type: application/json,
data: {"name": "Jack", "age": "12"}
...

Web API:

[HttpPost]
public string DoJson2(dynamic data)
{
    string name = data.name;
    int age = data.age;

    return name;
}

複雑なオブジェクトタイプがある場合は、次を使用して動的タイプを解析する必要があります。

JsonConvert.DeserializeObject< YourObjectType >(data.ToString());

複雑なデータコンテンツのサンプルがここにあります。これには、配列と辞書オブジェクトが含まれています。

{"AppName":"SamplePrice","AppInstanceID":"100","ProcessGUID":"072af8c3-482a-4b1c‌​-890b-685ce2fcc75d","UserID":"20","UserName":"Jack","NextActivityPerformers":{"39‌​c71004-d822-4c15-9ff2-94ca1068d745":[{"UserID":10,"UserName":"Smith"}]}}
于 2013-01-24T02:28:51.663 に答える
1

リクエスト本文に byte[] を投稿することができ、その値は正常にモデル バインドされました。コンテンツタイプは設定されていますか? ここでは、単純な文字列は有効な JSON と見なされるため、リクエストの content-type が application/json に設定されている場合に機能するはずです...

そうは言っても、単純に、byte[] の代わりにボディからの文字列を期待する POST メソッドを作成し、コンテンツ タイプを application/json に設定することができます。

[HttpPost]
public void Post([FromBody]string buffer)
{
    // Some code goes here
}
于 2012-11-08T08:32:35.383 に答える
0

ここで解決策を見つけました。プリミティブ型の逆シリアル化を実現するには、カスタム MediaTypeFormatter を作成する必要があるようです。

于 2012-11-08T09:09:45.877 に答える
0

webApiに送信byte[]する方法がわかりませんが、できることは、バイナリ データをBase64 stringコントローラに渡し、 を に変換するbase64 stringことbyte[]です。

于 2012-11-08T07:41:51.757 に答える
0

なしで HttpPostedFileBase を使用しようとしました[FromBody]か?

public void Post(HttpPostedFileBase buffer)
于 2012-11-09T06:19:48.923 に答える