0

属性ルーティングが有効になっている ASP.NET Web API 2.1 プロジェクトと、次のように装飾されたコントローラー アクションがあります。

[Route("api/product/barcode/{barcodeType}/{barcode}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)

ここで、BarcodeSearchCriteria は複合型です。

public class BarcodeSearchCriteria
{
    public string Barcode { get; set; }

    public string BarcodeType { get; set; }
}

次のような「通常の」URL でうまく機能します。

/api/product/barcode/EAN/0747599330971

しかし、同時に次のような URL をサポートするにはどうすればよいでしょうか。

/api/product/barcode/?barcodeType=EAN&barcode=0747599330971

「読み取り可能」モードに切り替える前に、* .webtest で使用していました。

4

2 に答える 2

1

この場合、2 つのルートを持つことができます。

[Route("api/product/barcode")] //expects values from query string
[Route("api/product/barcode/{barcodeType}/{barcode}")] //expects value from route
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)
于 2014-02-15T18:19:34.430 に答える
0

クエリ文字列パラメーターを持つ通常の URL に対して定義されたルートがないようです。

このようにルートパラメータをオプションにしてみてください。

[Route("api/product/barcode/{barcodeType=""}/{barcode=""}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)

したがって、ルート テンプレート ルートとも一致する必要がありapi/product/barcodeます。

テストはしていませんが、あなたが私の主張を理解してくれることを願っています。

于 2014-02-15T07:08:01.290 に答える