ボディから常にnull値を取得するのはなぜですか?私はフィドラーの使用に問題はありませんが、郵便配達は失敗します。
私はそのようなウェブAPIを持っています:
[Route("api/account/GetToken/")]
[System.Web.Http.HttpPost]
public HttpResponseBody GetToken([FromBody] string value)
{
string result = value;
}
この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;
}
オブジェクトを投稿し、それを文字列にバインドしようとしています。代わりに、そのデータを表すタイプを作成します。
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;
}