3

以前の WebAPI (ベータ版) では、URI に追加されたオプションのパラメーターを受け取る "GetAll" メソッドを作成できました。

http://localhost/api/product?take=5&skip=10 

これはまだ機能しているようですが、すべてのパラメーターを含めた場合のみです。(ベータ版) では、パラメーター ( http://localhost/api/product/) を省略でき、"GetAll" メソッドが呼び出されます (take & skip は null になります)。一部のパラメーターを省略することもできますhttp://localhost/api/product?take=5(skip は null になります)。

public IEnumerable<ProductHeaderDto> GetAll(int? take, int? skip)
{
    var results = from p in productRepository
                  select new ProductHeaderDto
                    {
                        Id = p.Id,
                        Version = p.Version,
                        Code = p.Code,
                        Description = p.DescriptionInternal,
                        DisplayName = p.Code + " " + p.DescriptionInternal
                    };
    if (skip != null) results = results.Skip(skip.Value);
    if (take != null) results = results.Take(take.Value);
    return results;
}

(RC) で、「要求に一致するコントローラー '製品' でアクションが見つかりませんでした」と表示されるようになりました。パラメータの両方またはいずれかが欠落している場合。メソッドパラメーターに [FromUri] を追加しようとしましたが、影響はありません:

public IEnumerable<ProductHeaderDto> GetAll([FromUri] int? take, [FromUri] int? skip)

デフォルト値の設定も試しました:

public IEnumerable<ProductHeaderDto> GetAll(int? take = null, int? skip = null)

メソッド署名を照合しようとするときに使用できる「オプションの」パラメーター属性はありますか?

4

1 に答える 1

1

これは RTM で修正されたバグです。デフォルト値を指定することで、オプションのパラメータを持つことができます。

public IEnumerable<string> Get(int? take = null, int? skip = null)

ところで、 Web API odata パッケージで $skip と $top を使用して、同じ機能を実現できます。

于 2012-09-04T18:59:43.717 に答える