2017-09-26 157 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) –