1

web-api を使用して、/api/cat/orders/ に移動します

以下のルートとコントローラーメソッドを指定しました。「extid」をオプションにしたので、「ApiRouteWithCategoryAndExtId」ルートと「GetMessageByCategoryExtId」メソッドが使用されることを期待していました。ただし、デフォルトの Get メソッドを使用しています。

(/api/cat/orders/id18 は GetMessageByCategoryExtId を使用しますが、extid はオプションではありません)

私は何を間違っていますか?

ルート:

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

config.Routes.MapHttpRoute(
    name: "ApiRouteWithCategoryAndExtId",
    routeTemplate: "api/cat/{category}/{extid}",
    defaults: new { extid = RouteParameter.Optional, controller = "Default"}
);

コントローラ:

public string Get()

public HttpResponseMessage GetMessageById(int id)

public HttpResponseMessage GetMessageByCategoryExtId(
    string category, string extid)
4

1 に答える 1

1

ここで、 のデフォルト値を指定する必要がありますextid

public HttpResponseMessage GetMessageByCategoryExtId(
    string category, string extid **= null**)

/api/cat/orders/上記のデフォルト値が指定されていない場合、webapi はアクションのパラメーターと利用可能な値を (ルート パラメーターまたはクエリ文字列値を介して) 厳密に一致させようとします。はルート値に存在しないため、webapi は に一致しませんGetMessageByCategoryExtId

于 2013-03-15T16:05:55.690 に答える