Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心属性路由_C#_Asp.net Core_Asp.net Core 2.0_Asp.net Core Routing - Fatal编程技术网

C# ASP.NET核心属性路由

C# ASP.NET核心属性路由,c#,asp.net-core,asp.net-core-2.0,asp.net-core-routing,C#,Asp.net Core,Asp.net Core 2.0,Asp.net Core Routing,我正在将一个项目迁移到asp net core,但我无法配置这些路由,我正在使用属性映射操作 ASP.Net WebAPI2的代码 ASP.Net核心代码 在文件Startup.cs中设置为app.UseMvc() 新框架期望更明确地指示端点的意图 [Route("api/[controller]")] public class SalesController : Controller { [HttpGet("{id:int}")] // GET api/sales/1 pub

我正在将一个项目迁移到asp net core,但我无法配置这些路由,我正在使用属性映射操作

ASP.Net WebAPI2的代码

ASP.Net核心代码

在文件Startup.cs中设置为app.UseMvc()


新框架期望更明确地指示端点的意图

[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
    }  
}

参考

也许我现在讨论得太晚了,但这对其他最终阅读本页的人来说可能很有价值,就像我一样。API端点的问题在于,您将其中两个端点配置为处理相同的路由:
GET/API/sales

如果尝试访问该路由,框架将无法区分
Get(PaginationHelper)
GetMe(bool?
)。原因是它们都具有
[HttpGet]
属性,这意味着它们都能够处理您在类声明上方的
[route(“api/[controller]”)
属性中指定的路由。由于这些被声明为能够处理相同的路由,因此您的异常(
多个操作匹配

问题的解决方案取决于您希望处理该模糊路线的操作。假设您希望路由
GET/api/sales
GET(PaginationHelper)
处理,您可以将
GetMe(bool?)
操作方法及其
[HttpGet]
属性更改为以下内容:

[HttpGet("me")] // GET api/sales/me
public IActionResult GetMe() {
    // Logic
}

我不确定。。但是我认为您可以为该方法添加一个路由,可能需要在现有路由之前添加,或者您可以使用特定路由为该方法添加一个路由属性。路线规则在声明时很重要,如果其他捕获物先到达,您将无法到达。这对您有效吗?//GET api/values[HttpGet]public IActionResult GET(){return Ok(新字符串[]{“value1”,“value3”});}参数[me]将是一个过滤器,默认情况下为false,但我可以输入sales吗?me=true,在这种情况下,此属性无法解决此问题不起作用,错误消息:处理请求时发生未处理的异常。AmbiguousActionException:匹配了多个操作。以下操作匹配路由数据并满足所有约束:与方法public-IActionResult-Get([FromQuery]PaginationHelper-page)冲突和public-IActionResult-GetMe(bool-me)完美,这正是我所寻找的解决方案。绝对“对最终阅读本页的其他人有价值”!
[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
    }  
}
[HttpGet("me")] // GET api/sales/me
public IActionResult GetMe() {
    // Logic
}