3

MVC プロジェクトで API を使用する方法を調べましたが、疑問があります。(誰かが尋ねる前に、私は C# 言語で書いています)。

これまでのところ、Api のルート構成がWebApiConfigクラスに設定されており、デフォルトではルートが次 のようになっていることがわかっています。

routeTemplate: "api/{controller}/{id}"

これにより、jSon リクエストをコンパイルするときに、特定の結果を得るためにどの URI を呼び出さなければならないかがわかります。
しかし、もっと具体的にしたいので、Api のルートを次のように変更しました。

routeTemplate: "api/{controller}/{action}/{id}"

このルートを使用すると、ApiController 内の特定のアクション (メソッド?) への URI を直接構築できます。

また/{controller}/、jSon で URI を作成しているときに、 がクラスの名前であることもわかりました。つまり、クラスがProductsControllerコントローラー名である場合、URI を構築するために使用する必要があるのは/products. (したがって、全体の URL は になります/api/products)。

質問は次のとおりです。
ちょうど という名前の ApiController クラスがある場合Products、それは URI の一部として認識できますか? または、ApiController クラスは「Controller」で終わる必要がありますか?
チュートリアルに従って、ApiController を他のコントローラーと同じフォルダーに配置しました。Api を別のフォルダーに配置できることはわかっています。では、すべての API は MVC によって自動的に認識されるのでしょうか? つまり、どこに保存しても、API として認識されますか?
もしそうなら、最終的に私が取り組んでいるプロジェクトとは別のプロジェクトにある API を呼び出すことができますか?
API のコレクションを含む単一のプロジェクトを (クラス ライブラリとして) 作成できますか?
別のプロジェクトで API を呼び出したい場合、ルート構成は変更されますか?

4

2 に答える 2

6

ああ、それはたくさんの質問です... :)

それらに答えるには:

Products という名前の ApiController クラスがある場合、URI の一部として認識できますか? または、ApiController クラスは「Controller」で終わる必要がありますか?

ASP.NET ルーティングはその Coonvention を使用するため、私の知る限り、その規則に従わずに好きなようにクラスに名前を付けると、それらは認識されず、おそらく 404 が返されます。質問に答えるには、はい、Controllerデフォルトの規則を上書きしない限り、名前は で終わる必要があります (Mike Goodwin の回答を参照)。

チュートリアルに従って、ApiController を他のコントローラーと同じフォルダーに配置しました。Api を別のフォルダーに配置できることはわかっています。では、すべての API は MVC によって自動的に認識されるのでしょうか? つまり、どこに保存しても、API として認識されますか?

フォルダーは関係ありません。ASP.NET は名前に一致するクラスを探します。Api コントローラーは、コントローラーではなくベースApiControllerから継承するため、API コントローラーとして認識されます。

もしそうなら、最終的に私が取り組んでいるプロジェクトとは別のプロジェクトにある API を呼び出すことができますか? API のコレクションを含む単一のプロジェクトを (クラス ライブラリとして) 作成できますか? 別のプロジェクトで API を呼び出したい場合、ルート構成は変更されますか?

これは明確ではありません... API を「呼び出す」とはどういう意味ですか? APIが別のプロジェクトにある場合、おそらく別のアドレスに配置されます...必要なのは、JSONリクエストをそのアドレスに送信することだけです。したがって、jQueryを使用している場合は、次のようにします。

$.getJSON('http://other.server/api/Controller', function(data) { ... });

単にこれではなく:

$.getJSON('/api/Controller', function(data) { ... });

(クロスサイト スクリプティングの問題に注意してください)。

これで問題が解決することを願っています。何か意味が分からない場合はお気軽にお尋ねください...

于 2013-09-13T15:28:27.693 に答える