带有URI参数的WebAPI RC GetAll

时间:2012-07-24 23:13:48

标签: asp.net-web-api

以前在WebAPI(测试版)中,我能够创建一个“GetAll”方法,该方法在URI上添加了可选参数:

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

这似乎仍然有用,但前提是我包含了所有参数。在(beta)中,我可以省略参数(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)

尝试匹配方法签名时是否有某种“可选”参数属性可以使用?

1 个答案:

答案 0 :(得分:1)

这是一个已在RTM中修复的错误。您可以通过指定默认值来使用可选参数。

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

顺便说一下,您可以使用web api odata package中的$ skip和$ top来实现相同的功能。