簡體   English   中英

使用相同類型參數執行不同 GET 方法的路由

[英]Routing for executing different GET methods with same type of parameter

有人能幫我路由嗎?

WebApiConfig我有這個映射

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){...}
}

當我嘗試發送請求時

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

2. http://.../AppartmentCategory/?propertyUid=2fdc968d-0192-e611-a98b-9c5c8e0005fa

在這兩種情況下執行方法public IHttpActionResult GetList(Guid propertyUid)

對於第一次請求執行公共 IHttpActionResult Get(Guid uid)方法,我應該修復什么?

您正在混合基於約定的路由和屬性路由。 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){...}
}

您應該嘗試更多地區分這兩個操作,並盡量不要在同一控制器中混合基於約定和屬性路由。

[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){...}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM