1

MVC4WebAPIを作成する最初の試みで。ルートの処理方法について、少しずれているように見えることがいくつかあります。

  • コントローラには、4つを超えるアクションがありませんか?
  • 1つのHTTP動詞のみをサポートするリソースは、それでも独自のコントローラーを取得しますか?
  • ルート階層は非常にフラットになる傾向があります、または
  • 人間向けのMVCアプリと比較して、非常に多くのルートを指定/維持する必要があります。

2つまたは3つのルートのみを使用するかなり大きなサイトを作成しましたが、APIを使い始めたばかりで、最大で12近くになります。APIはその性質上、Webサイトよりも深いURLに適していると思いますが、これは少し過剰に思えます。

どこかに名前空間やルーティング規則がないような気がします。私はこれのほとんどすべてを、アクション名がルートの一部ではなく、HTTPメソッドだけであるという事実に起因しています。パラメーターマッチング、コントローラー名、HTTPメソッド以外の方法でルートをサポートする方法はありますか?

4

2 に答える 2

4

Global.asaxでルーティングを変更できます。デフォルトは次のように設定されています。

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

ただし、たとえばアクション名を使用するように変更できます。

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

MVC WEb APIでのカスタムルーティングの詳細については、この記事を参照してください。

コメントに基づいて更新

上記は、「ルーティングを変更できますか?」という質問に対する回答です。簡単な答えは「はい」ですが、別の答えで指摘されているように、優れたRESTAPIを維持したくない場合があります。デフォルトのルーティングを備えたMVCWebAPIは、リソースで作業している基本的なRESTの概念を維持し、コントローラーがリソースを表します。あなたの他の質問では、あなたは例を挙げます:

DELETE /account/1234/note/321 <- delete note 321 on account 1234

アカウント1234のメモを削除する場所。この場合、作業中のリソースはメモです。これをより適切に表現するには、クエリ文字列を使用して、この例のAPIを次のようにします。

DELETE /note/321?account=1234 <- delete note 321 on account 1234

このように、ルーティングを混乱させる必要はなく、処理対象のリソースがフィルターが使用されているメモであることは明らかです。ただし、noteのIDが特定のアカウントだけでなくアプリケーション全体で一意である場合は、この明示的なフィルター(つまり、where句)を追加する必要があるかどうかも疑問に思います。

于 2012-07-12T20:27:24.463 に答える
1

Web APIは、RESTFullサービス用に設計および調整されており、コントローラーをサービス名と見なします。GET / PUT / POST / DELETEは、慣例により、名前に動詞が含まれているコントローラーアクションにマップされます。

RESTFullを実行しようとしていない場合は、代わりにHTTPControllerを使用します。お気づきかもしれませんが、同じプロジェクトで別々のルートを使用してそれらを混在させることができます。

于 2012-07-12T20:18:08.650 に答える