2016-10-18 5 views
1

誰もルーティングに手伝ってくれませんか? 同じタイプのパラメータで異なるGETメソッドを実行するためのルーティング

config.Routes.MapHttpRoute(DefaultApi", 
    routeTemplate: "{controller}/{uid}", 
    defaults: new {uid = RouteParameter.Optional} 
); 

とコントローラ

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController 
{ 
    [HttpGet] 
    public IHttpActionResult Get(Guid uid){...} 

    [HttpGet] 
    [Route("{propertyUid?}")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 

での2つの方法が、私がリクエスト

1. http://.../AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA 

を送信しようとすると、私はこのマッピングを持っている
WebApiConfig方法 公共IHttpActionResult GetListの(GUID propertyUid)を実行し、両方のケースで
2. http://.../AppartmentCategory/?propertyUid=2fdc968d-0192-e611-a98b-9c5c8e0005fa 

私が最初の要求のために公共IHttpActionResultゲット(GUIDはuid)方法を実行するための修正SHOLD何?

+0

従来のルーティングと属性ルーティングを混在させています。 'config.MapHttpAttributeRoutes()'は、慣習的なルートの前にマップされているので、最初に 'GetLists'をヒットします。技術的には、どちらのアクションも同様のルートを持ちます。あなたはもう少し二つの行動を区別しようとするべきです。 – Nkosi

答えて

1

従来のルーティングと属性ルーティングを混在させています。 (それが必要として)config.MapHttpAttributeRoutes()

config.MapHttpAttributeRoutes(); 

config.Routes.MapHttpRoute(DefaultApi", 
    routeTemplate: "{controller}/{uid}", 
    defaults: new {uid = RouteParameter.Optional} 
); 

ので、それは常に一致するテンプレートを獲得最初の試合としてGetLists最初にヒットする規則ベースのルーティングの前にマッピングされています。技術的には、どちらのアクションも同様のルートを持ちます。

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController 
{ 
    //GET AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA VIA CONVENTION-BASED ROUTING 
    [HttpGet] 
    public IHttpActionResult Get(Guid uid){...} 

    //GET AppartmentCategory/2fdc968d-0192-e611-a98b-9c5c8e0005fa VIA ATTRIBUTE ROUTING  
    [HttpGet] 
    [Route("{propertyUid?}")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 

2つのアクションをもう少し区別し、同じコントローラでコンベンションベースルーティングと属性ルーティングを混在させないようにしてください。

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController { 
    //GET AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA 
    [HttpGet] 
    [Route("{uid:guid}")] 
    public IHttpActionResult Get(Guid uid){...} 

    //GET AppartmentCategory?propertyUid=2fdc968d-0192-e611-a98b-9c5c8e0005fa 
    [HttpGet] 
    [Route("")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 
+0

私の問題の説明と解決に感謝します! – ashpakov

関連する問題