2017-09-26 197 views
3

我正在將項目遷移到asp net核心,但我無法配置這些路由,我正在使用屬性來映射操作。對於ASP.Net核心ASP.NET核心屬性路由

Startup.cs設置app.UseMvc文件

代碼ASP.Net WebAPI2

[Route("api/[controller]")] 
public class SalesController : Controller 
{ 
    // api/sales/1 -> ok 
    [HttpGet] 
    public HttpResponseMessage Get(int id) 
    { 
     // Logic 
    } 

    // api/sales -> ok 
    [HttpGet] 
    public HttpResponseMessage Get([FromUri] PaginationHelper pagination) 
    { 
     // Logic 
    } 

    // api/sales?me -> ok 
    [ActionName("Get")] 
    public HttpResponseMessage GetMe(bool? me) 
    { 
     // Logic 
    } 
} 

碼();

[Route("api/[controller]")] 
public class SalesController : Controller 
{ 
    // api/sales/1 -> ok 
    [HttpGet("{id}")] 
    public IActionResult Get(int id) 
    { 
     // Logic 
    } 

    // api/sales -> don't work 
    [HttpGet] // -> ??? 
    public IActionResult Get(PaginationHelper pagination) 
    { 
     // Logic 
    } 

    // api/sales?me -> don't work 
    [HttpGet] // -> ??? 
    public IActionResult GetMe(bool? me) 
    { 
     // Logic 
    } 
} 
+0

我不知道。但我認爲,你可以添加對一個路由,可能需要先於現有的,或者你可以一個路由屬性添加到方法與特定路線。 路線規則聲明時很重要,如果其他一個首先捕獲你不會到達那裏.. – rmjoia

+1

這是否適合你? // GET api/values [HttpGet] public IActionResult Get() { return Ok(new string [] {「value1」,「value3」}); } –

回答

1

新框架需要更明確地指示端點的意圖。

[Route("api/[controller]")] 
public class SalesController : Controller { 

    [HttpGet("{id:int}")] // GET api/sales/1 
    public IActionResult Get(int id) { 
     // Logic 
    } 

    [HttpGet] // GET api/sales?page=1 assuming PaginationHelper has page property 
    public IActionResult Get([FromQuery]PaginationHelper pagination) { 
     // Logic 
    } 

    [HttpGet] // GET api/sales?me=true 
    public IActionResult GetMe(bool? me = false) { 
     // Logic 
    } 
} 

參考Asp.Net Core: Model Binding

+0

參數[me]會是一個過濾器,默認情況下它是false,但是我可以輸入sales?me = true,在這種情況下,此屬性不會解決此問題 –

+0

@WillianTeleginski yes,check update。 – Nkosi

+0

不工作, 錯誤消息: 處理請求時發生未處理的異常。 AmbiguousActionException:匹配多個操作。以下操作匹配路由數據並滿足所有約束條件: 與方法衝突 public IActionResult Get([FromQuery] PaginationHelper page) 和 public IActionResult GetMe(bool me) –