2016-10-06 5 views
1

私はWeb APIを使い始めましたが、クエリパラメータがない場合、パラメータ値がnullであると思われました。web api nullでリクエストを取得しますか?

例えば、私はこのモデルがあります:私はapi/booksをヒットした場合、次のアクション

[HttpGet] 
[Route("api/books")] 
public IHttpActionResult Get([FromUri]GetBooksRequest request) { 
    // request is null 
} 

で使用

[DataContract] 
public class GetBooksRequest 
{ 
    public int? BookLimit { get; set; } 
} 

nullすることになったパラメータ値はありますか?。

エンドポイントにヒットしますが、パラメータはnullです。 api/books?booklimit=1を実行すると、パラメータはnullでなく、BookLimitプロパティは期待通りに1に設定されます。

ウェブAPIが動作するかどうかはわかりませんでした。

答えて

2

はい、それはどのように動作するのですか。フレームワークは要求を検査し、([FromUri]属性でチェックするように指示されたため)からモデルを構築します。

提供された情報でモデルを構築できない場合、モデル/パラメータはデフォルト値(この場合はnull)に設定されます。それは設計によるものです。

出典:Parameter Binding in ASP.NET Web API

[FromUri]

はURIから複合型を読み取るためのWeb APIを強制的に使用して、パラメータに [FromUri]属性を追加します。次の例では、GeoPointタイプを定義し、コントローラメソッドとともにURIから GeoPointを取得します。

public class GeoPoint 
{ 
    public double Latitude { get; set; } 
    public double Longitude { get; set; } 
} 

public ValuesController : ApiController 
{ 
    public HttpResponseMessage Get([FromUri] GeoPoint location) { ... } 
} 

クライアントがGeoPointを構築するためにそれらを使用するクエリ文字列 とWeb APIに緯度と経度の値を置くことができます。例:

http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989 
関連する問題