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

2番目のリクエストでは、404が見つかりません。オプションのパラメータと組み合わせた場合、IDは一致した変数としてカウントされないようです。

ここに欠けているものはありますか?MVCでの私の経験から、ルートの追加はすぐに手に負えなくなる可能性があることがわかっているので、この問題をカバーするために新しいルートの追加を開始することはほとんどありません。

4

1 に答える 1

0

私はこれを完全に確信することはできませんが、それは私のデフォルト値のようです

    int? loadType = 1

パラメータが問題の原因です。デフォルト値をnullに変更した場合

    int? loadType = null

そして、デフォルト値を設定するためのアクションをチェックインします

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

リクエストの両方のバージョンは、意図したアクションに適切に送信されます。

于 2012-11-06T15:41:47.410 に答える