0

在 ASP.NET Web API 中,我修改了默认的 GET 操作以接受一个可选参数,该参数将声明获取对象的深度:

    public ObjectModel Get(int id, int? loadType = 1)
    {
        if (loadType.Value == 1)
        {
            return GetDeepObjectModel(id);
        }
        else
        {
            return GetShallowObjectModel(id);
        }
    }

给定默认路由:

    config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"\d+" }
        );

我对有效请求有疑问:

    https://www.mysite.com/api/objects/1234?loadType=1

会起作用,但我也希望同样的操作适用于基本 get - 考虑 loadType 参数是可选的:

    https://www.mysite.com/api/objects/1234

对于第二个请求,我得到一个 404 not found。当 id 与可选参数配对时,它似乎没有被计为匹配变量。

我在这里缺少什么吗?我非常不想开始添加新路由来解决这个问题,因为我使用 MVC 的经验告诉我,添加路由很快就会失控。

4

1 回答 1

0

我不能完全确定这一点,但它似乎是我的默认值

    int? loadType = 1

参数导致问题。如果我将默认值更改为null

    int? loadType = null

并检查设置默认值的操作

    if (!loadType.HasValue)
    {
        loadType = 1;
    }

请求的两个版本都正确地定向到预期的操作。

于 2012-11-06T15:41:47.410 回答