0

これを機能させるために MVC ルーティングで何をする必要があるのか​​ わかりません

これが私の1つのルートです:

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

リクエスト/Shipments/はうまく機能します。

リクエスト/Shipments/3/Packagesはうまく機能します。

ただし、リクエスト/Shipments/3は次のエラーで失敗します。

要求に一致する複数のアクションが見つかりました: System.Linq.IQueryable`1[Api.Controllers.RequisitionsController+PackageRequisitionWithTracking] タイプ Api.Controllers.RequisitionsController の GetPackageRequisitions(Int32) Api.Models.ShipmentRequisition タイプ Api.Controllers の GetShipmentRequisitions(Int32) .RequisitionsController

以下を区別できないようです。

// No ActionName    
public ShipmentRequisition GetShipmentRequisitions(int id)

[ActionName("Packages")]
public IQueryable<PackageRequisitionWithTracking> GetPackageRequisitions(int id)

get shipping by id にアクション名がないため、そのルートが機能すると思っていたでしょう。

4

1 に答える 1

0

ここですでに数回回答されています-RESTスタイルのルーティング(コントローラーにGETを要求すると、デフォルトのGetアクションが返される)とRPCルーティング(ルートに明示的なアクション名を指定する)を混在させることはできません)単一のコントローラーで。

Web API は、既定の "GET" アクションとして使用するアクションを認識しません。

ASP.NET Web Stack の Codeplex - http://aspnetwebstack.codeplex.com/workitem/184の Web API チームには、未解決の問題があります。

現時点での最善の策は、REST ルーティング (HTTP 動詞に基づくルーティング) と RPC ルーティング (URL のアクション名に基づくルーティング) を使用するコントローラーにコントローラーを分離することです。

于 2012-10-04T11:56:42.557 に答える