4

新しいASP.NETWebAPIを使用して次のことを実行しようとしています。

/api/business/{id}ビジネスのディレクトリ情報を取得するためのGET 。同じURLにPUTすると、情報などが更新されます。その部分は正常に機能します。私が抱えている問題は、以前はアクションだったものを追加して、そのビジネスのレビューを表示したいときに発生します。/api/business/{id}/reviews理想的には、GETがレビューを返したり、POSTが新しいレビューを送信したりする場所に到達できるようにしたいです。

通常のASP.NETMVCアプリケーションでは、2つのアクションメソッド(ReviewsとPostReview)を定義し、属性を使用して2番目の関数のアクション名と受け入れられたHTTPメソッドを変更できます。新しいシステムのクラスでこれを行う方法があると思いますが、それが何であるかを理解できず、ドキュメントに問題について何も表示されていません。

私が知る限り、領域の使用は機能しませ/business/{id}。機能するにはURLが必要であり、領域が壊れている必要があります。

4

3 に答える 3

13

Web APIはアクションによるルーティングをサポートしているため、次のように実行できます。

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

コントローラのメソッド:

[HttpGet]
[ActionName("DirectoryInfo")]
public void GetDirectoryInfo(int id)

[HttpPut]
[ActionName("DirectoryInfo")]
public void PutDirectoryInfp(int id)

[HttpGet]
public void Review(int id)

[HttpPost]
[ActionName("Review")]
public void PostReview(int id)

もう1つのオプションは、BusinessControllerとReviewControllerの2つのコントローラーを作成し、次のルートを作成することです。

routes.MapHttpRoute(
    name: "BusinessRoute", 
    routeTemplate: "api/business/{id}", 
    defaults: new { controller = "Business", id = RouteParameter.Optional }
    );
routes.MapHttpRoute(
    name: "reviewsRoute", 
    routeTemplate: "api/contacts/{id}/reviews/", 
    defaults: new { controller = "Reviews", id = RouteParameter.Optional}
    );

次に、WebAPIスタイルの暗黙的なアクション名を使用します。

于 2012-04-06T18:04:26.847 に答える
1

DDDの観点から、レビューが集約である場合(独自のリポジトリがある場合)、独自のコントローラーが必要です。Postがそのルートアグリゲートである場合、Post自体とともに返される必要があります。

私が見ることができるものを形成します、それはルートアグリゲートであるため、それはそれ自身のコントローラーを必要とします。したがって、次のようになります。

/api/reviews/{id}

また

/api/reviews?postId={postId}

ここで、idはpostのidです。


これは主に、私たちがもう行動を起こしていないという事実によって引き起こされます。私はこれに完全に満足しているわけではありませんが、それは私たちが持っているものです。

于 2012-04-05T15:56:28.013 に答える
1

私が知る限り、領域の使用は機能しません。機能するには/ business / {id} URLが必要であり、領域が壊れている場合はそのURLが必要です。

DefaultHttpControllerSelectorちなみに、ASP.NET MVCをオーバーライドすることで、AreasとWebApiを適切に動作させることができます。私は、ASP.NETMVCでこの問題に取り組んできました。私の実装と、WebApiにエリアサポートを導入する方法の詳細については、次のブログを参照してください。

http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/

于 2012-08-16T18:02:43.613 に答える