2016-05-19 7 views
0

- 私のポストと私は/ /API /ユーザー/ {ID}のようなエンドポイントを持つPOSTメソッドを使用してhttp://localhost:8080/api/users/6/modify変更する必要があります。ルーティングRESTのWeb APIを書い非標準URIウェブAPI

私は読み込み/書き込みアクションを持つUsersControllerクラスを持っていますが、/ api/users/6/modifyではなく、/ api/usersにアクセスするだけでpostメソッドにアクセスできます。私は階層を拡張する必要があります(それがうまくいけば)。

これを行うにはどうすればよいですか?

答えて

2

asp.net web apiのAttribute Routingを使用できます。

最初に、HttpConfiguration、asp.net web apiテンプレートで有効にすると、WebApiConfig.csファイルに表示されます。その後

using System.Web.Http; 

namespace WebApplication 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      // Other Web API configuration not shown... 
     } 
    } 
} 

あなたはサンプルのため、ApiControllerから継承しなければならないと、カスタムルートを定義するRoute属性を使用することができ、コントローラを定義することができます。

[RoutePrefix("api/users")] 
public class UsersController : ApiController 
{ 
    [HttpPost] 
    [Route("{id}/modify")] 
    public HttpResponseMessage PostModify(int id) 
    { 
     // code ... 
    } 
} 

RoutePrefixは、すべての接頭辞を定義しますコントローラ上のアクション。したがって、PostModifyにアクセスするには、postアクションで/api/users/6/modifyのようなルートを使用する必要があります。あなたが望んでいない場合は、RoutePrefixを削除し、route属性に完全なURLを定義してください(/api/users/{id}/modifyなど)。

また、このようなルートを定義id引数の型保証することができます:

[RoutePrefix("api/users")] 
public class UsersController : ApiController 
{ 
    [HttpPost] 
    [Route("{id:int}/modify")] 
    public HttpResponseMessage PostModify(int id) 
    { 
     // code ... 
    } 
} 
+0

おかげで男を!! ...それは私が探していたまさにでした。それはうまくいった。私はこれの前に他のことを試みたし、それを働かせることができなかった。再度、感謝します。 – NicoRiff

関連する問題