RoutePrefix
は単独ではルーティングテーブルにルートを追加しないことを理解しています。アクションでは、Route
属性を宣言する必要があります。正式なブログ/ msdnページ/ defalut RoutePrefix
がルーティングテーブルにルートを追加しない理由を説明するものを見つけるのに苦労しています。
誰もがこれを含む権威のある投稿を持っていますが、そうであれば、誰であるかを教えてください。どうもありがとうございました。
Edit質問を明確にするために
動作しない
[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
public int get(){return 1000000;}
}
作品
[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
[Route("")]
public int get(){return 1000000;}
}
上記のシナリオは、get
のSteveController
アクションに空のルートがあることを明示的に述べているため機能します。これを行うと、ルートがRouteTable
に追加されます
最初のシナリオは機能しません。なぜなら、RoutePrefix
を使用してもルートテーブルに何も追加されないからです。 RoutePrefix
自体はルートを生成しません。これは一般的な知識のようですこれがなぜであるかを述べた情報源を知りたいです。尊敬されるコミュニティメンバー、つまりJon SkeetまたはMicrosoftチームの誰かが望ましい
ルートプレフィックスは、属性ルーティングの設計によりルートに関連付けられます。
コントローラー全体に共通のプレフィックスを設定するために使用されます。
この機能を紹介したリリースノートを読むと、主題についての理解を深めることができます。
属性ルーティング
ASP.NET Web APIは、Tim McCallの貢献のおかげで、属性ルーティングをサポートするようになりました。属性ルーティングでは、次のようにアクションとコントローラーに注釈を付けることにより、Web APIルートを指定できます。
[RoutePrefix("orders")]
public class OrdersController : ApiController
{
[Route("{id}")]
public Order Get(int id) { }
[Route("{id}/approve")]
public Order Approve(int id) { }
}
属性ルーティングにより、Web APIのURIをより詳細に制御できます。たとえば、単一のAPIコントローラーを使用してリソース階層を簡単に定義できます。
public class MoviesController : ApiController
{
[Route("movies")]
public IEnumerable<Movie> Get() { }
[Route("actors/{actorId}/movies")]
public IEnumerable<Movie> GetByActor(int actorId) { }
[Route("directors/{directorId}/movies")]
public IEnumerable<Movie> GetByDirector(int directorId) { }
}
この件に関する本当に良い記事
この問題に関する専門家はいませんが、これがどのように機能するかについての私の理解はここにあります。
属性ルーティングでは、フレームワークはコントローラーのアクションのルート属性を検査して、ルートエントリを作成し、ルートテーブルに追加します。したがって、属性ルーティングを使用している限り、[RouteAttribute]
。この属性がないと、アクションはデフォルトで規則ベースのルーティングに戻ります。 RoutePrefixAttribute
は、ルート/ Urlの定義方法をより詳細に制御できる拡張ポイントです。リリースノートにも同じことが書かれています。
私の理解と提供された最後のリンクを除いて、他のすべてはMSドキュメントから引用されました。
信頼できるソースについては、MSDNの説明(エンファシスマイニング)を参照してください。
コントローラーまたはアクションを配置して、ルートを介して直接公開します。コントローラーに配置すると、System.Web.Mvc.RouteAttributeがコントローラーにないアクションに適用されます。
コントローラ内のすべてのアクションに適用されるルートプレフィックスでコントローラに注釈を付けます。
ご覧のとおり、Route
の説明にはアクションの公開が記載されていますが、RoutePrefix
は公開していません。