サーチ…


前書き

名前が示すように、これは属性を使用してルーティングします。これにより、ユーザーはWebAPI内のURIをより詳細に制御できます。たとえば、リソースの階層を記述できます。しかし、従来の「Conventional Routing」は完全にサポートされています。ユーザーは両方を混在させることもできます。

構文

  • [RoutePrefix( "api / books")] - コントローラクラス用
  • [Route( "getById")] - アクション
  • [Route( "〜/ api / authors / {authorId:int} / books")] - ルートプレフィックスを無効にする

パラメーター

パラメータ名詳細
RoutePrefix 属性をコントローラクラスに追加します。アクション内のすべての一般的なURLプレフィックスはここに集められます。文字列を入力として受け取ります
ルートコントローラーのアクションに使用します。それぞれの行動は、必ずしも必要ではない)
ルート(〜/ api /) これはルートプレフィックスを無効にします

備考

現在、属性ルートにはController specific Message Handlersはありません。宣言時にどのハンドラをどのハンドラで実行するかを指定する方法がないため。これはConventional Routing可能です。

基本属性ルーティング

コントローラーアクションに属性を追加するだけです

[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId) 
{ 
    //action code goes here 
}

これは/product/1/customerとして照会され、 productId=1がコントローラーのアクションに送信されます。

'{}'内の1つとアクションパラメータが同じであることを確認してください。この場合productId

これを使用する前に、次の方法で属性ルーティングを使用するように指定する必要があります。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}

ルート接頭辞属性

コントローラ内のすべてのルートに共通のルート部分が必要な場合は、 RoutePrefix属性が使用されます。

以下の例では、コードのapi / students部分が共通であるため、 RoutePrefixを定義して繰り返し使用することはできRoutePrefix

[RoutePrefix("api/students")]
public class StudentController : ApiController
{
[Route("")]
public IEnumerable<Student> Get() 
{
    //action code goes here 
}

[Route("{id:int}")]
public Student Get(int id) 
{
    //action code goes here 
}

[Route("")]
public HttpResponseMessage Post(Student student) 
{
    //action code goes here 
}

}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow