2016-08-16 7 views
0

データを取得および送信するアクションを持つAPIコントローラがあります。私はGetProductByIdにアクセスしようとしています。ajax bu productIdパラメータからmeyhodは常にゼロ(0)に等しいです。 GetAllメソッドをGETメソッドで呼び出す場合は、すべて問題ありません。 のJavaScriptコードASP.NET Core APIパラメータがnullです

var product = JSON.stringify({ productId: id }); 
     $http({ 
      method: 'POST', 
      contentType: 'application/json', 
      url: '/api/Product/ProductInfo', 
      data: product 
     }).then(function successCallback(response) { 
      console.log(response); 
     }, function errorCallback(response) { 
      console.log(response); 
     }); 

以下のようなもので、その場合は、何が起こっている理由をAPIコントローラーが

[Route("api/Product")] 
public class ProductController : BaseController 
{ 
    [HttpPost] 
    [Route("ProductInfo")] 
    public Product GetProductById([FromBody]int productId) 
    { 
     return UnitOfWork.GetRepository<Product>().FirstOrDefault(i => i.Id == productId); 
    } 
    [HttpGet] 
    [Route("GetAll")] 
    public string GetAll() 
    { 
     return "Can"; 
    } 
} 

以下のようなもので、誰もが言うことはできますか?

答えて

1

{ productId: id }の文字列表記をコントローラでpostメソッドでバインドすると返信していますが、が必要です。 productIdはそのメソッドの引数ではなく、送るべきパラメータ名を定義していません。そのjsonボディの代わりに身体のIDだけを送信してみてください{ productId: id }

あなたはJSON本体を返送したい場合は、適切な表現があるべき

class ProductModel 
{ 
    int productId; 
} 

これは、本質的に、あなたのJSONペイロードあなたが送る方法を解析あなたができるようになるだろう、あなたのポストのアクションについては、以下のようなクラスそれはもちろん、カスタムモデルのバインダーを選択することもできますが、それは過剰な作業になります。 IDが123である場合

例えば、私は、コードを変更しない{ productId: 123 }

+0

、体として123を使用します。私はpath @ productId = 1のようなurlを呼び出さないでください。またプリミティブ型の代わりに参照型を使うべきではありません。 –

+0

Cool。それは本質的にそれがポストであることを考えると正しい方法です。 :)これらのケースでは、キー値のペアを使用できますが、とにかく必要なクラスはありません。 –

+0

KeyValuePair?どうすればjsonから送信することができますか、またはapiのアクションから取得することは明らかですか? –

関連する問題