使用可选参数获取ID

时间:2012-11-05 23:18:00

标签: c# get asp.net-web-api

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

    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。似乎当id与可选参数配对时,id不会被计为匹配变量。

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

1 个答案:

答案 0 :(得分:0)

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

上的默认值
    int? loadType = 1

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

    int? loadType = null

并检查设置默认值的操作

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

请求的两个版本都适当地指向了预期的操作。