web-dev-qa-db-ja.com

本文のjsonデータをWeb APIに投稿する

ボディから常にnull値を取得するのはなぜですか?私はフィドラーの使用に問題はありませんが、郵便配達は失敗します。

私はそのようなウェブAPIを持っています:

    [Route("api/account/GetToken/")]
    [System.Web.Http.HttpPost]
    public HttpResponseBody GetToken([FromBody] string value)
    {
        string result = value;
    }

私の郵便配達人のデータ: enter image description here

およびヘッダー: enter image description here

9
Mennan

このjsonオブジェクトを送信していることを伝えているため、WebAPIは期待どおりに機能しています。

{ "username":"admin", "password":"admin" }

次に、stringとして逆シリアル化するように要求していますが、これは有効なJSON文字列ではないため不可能です。

ソリューション1:

valueの値のように実際のJSONを受け取りたい場合は、次のようになります。

value = "{ \"username\":\"admin\", \"password\":\"admin\" }"

次に、postmanでリクエストの本文を設定するために必要な文字列は次のとおりです。

"{ \"username\":\"admin\", \"password\":\"admin\" }"

ソリューション2(これはあなたが望むものだと思います):

JSONに一致するC#オブジェクトを作成して、WebAPIが適切に逆シリアル化できるようにします。

まず、JSONに一致するクラスを作成します。

public class Credentials
{
    [JsonProperty("username")]
    public string Username { get; set; }

    [JsonProperty("password")]
    public string Password { get; set; }
}

次に、メソッドでこれを使用します:

[Route("api/account/GetToken/")]
[System.Web.Http.HttpPost]
public HttpResponseBody GetToken([FromBody] Credentials credentials)
{
    string username = credentials.Username;
    string password = credentials.Password;
}
9
Nasreddine

オブジェクトを投稿し、それを文字列にバインドしようとしています。代わりに、そのデータを表すタイプを作成します。

public class Credentials
{
    public string Username { get; set; }
    public string Password { get; set; }
}

[Route("api/account/GetToken/")]
[System.Web.Http.HttpPost]
public HttpResponseBody GetToken([FromBody] Credentials value)
{
    string result = value.Username;
}
3
Bruno Garcia