2

私はWebAPIを使用して一連のサービスを公開しています。一部のルートで問題が発生しており、サポートが必要です。

デフォルトのルートを定義しました:

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

このルートを使用すると、「/ api /clients/」や「/api/ clients/4」などの通常のルートにアクセスできます。次のルート「api/clients / 4/profiles」および「api/clients / 4/validations」にヒットするGETが必要です。

私は成功せずに次のルートを試しました:

config.Routes.MapHttpRoute(
    name: "ClientProfilesApi",
    routeTemplate: "api/{controller}/{clientid}/profiles",
    defaults: new { action = RouteParameter.Optional },
    constraints: new { controller = "clients" }
    );

 config.Routes.MapHttpRoute(
   name: "ClientValidationsApi",
       routeTemplate: "api/{controller}/{clientid}/validations",
       defaults: new { action = RouteParameter.Optional },
   constraints: new { controller = "clients" }
   );

また、次のように「ActionName」属性を使用してみました。

[HttpGet]
[ActionName("profiles")]
public IEnumerableResponseDto<ProfileLayoutDto> GetProfiles(Int64 clientId, [FromUri] IEnumerableRequestDto request)
{ .... }


[HttpGet]
[ActionName("profiles")]
public IEnumerableResponseDto<ValidationLayoutDto> GetValidations(Int64 clientId, [FromUri] IEnumerableRequestDto request)
{ .... }

私は何が欠けていますか?コントローラに複数のGETを設定することはできませんか?

4

2 に答える 2

3

ルート「api/clients / 4/profiles」および「api/clients / 4 / validations」の場合、アクションに「profiles」および「validations」という名前を付けてから、デフォルトルートの前に次のルートを使用します。

config.Routes.MapHttpRoute(
    name: "ClientProfilesApi",
    routeTemplate: "api/clients/{clientid}/profiles",
    defaults: new { controller = "clients", action = "profiles",  },
    constraints: new {clientid = @"\d+" }
    );

 config.Routes.MapHttpRoute(
    name: "ClientValidationsApi",
    routeTemplate: "api/clients/{clientid}/validations",
    defaults: new { controller = "clients", action = "validations",  },
    constraints: new {clientid = @"\d+" }       );

これは、ルート'api / clients / 4 /profiles'がコントローラー'clients'およびアクション'profiles'に移動し、パラメーター'clientid'が整数でなければならないことを意味します。

デフォルトルートは常に最後である必要があります。

于 2013-01-16T02:59:31.417 に答える
0

必要なもの:

config.Routes.MapHttpRoute(
name: "ClientApi",
routeTemplate: "api/{controller}/{clientid}/{action}",
defaults: new { action = RouteParameter.Optional },
constraints: new { controller = "clients" }
);

おそらくまだActionName属性が必要であり(ただし、よくわかりません)、次のGetリクエストも必要でない限り、RouteParameter.Optionalのデフォルトをアクションから削除することをお勧めします。

api/clients/4

コントローラのGetアクションによって処理されます。

于 2013-01-16T02:49:18.160 に答える