c# - ASP.NET Core 属性路由

标签 c# asp.net-core asp.net-core-2.0 asp.net-core-routing

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

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

ASP.Net Core 代码

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

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

最佳答案

也许我来不及讨论这个问题,但这对像我一样最终阅读此页面的其他人来说可能很有值(value)。您的 API 端点的问题是您将其中的 2 个端点配置为处理相同的路由:GET/api/sales

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

您的问题的解决方案取决于您要处理该不明确路线的操作。假设您希望路由 GET/api/salesGet(PaginationHelper) 处理,您可以更改 GetMe(bool?) action 方法及其 [HttpGet] 属性如下所示:

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

关于c# - ASP.NET Core 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46427063/

相关文章:

asp.net - 如何从 Tag Helper 访问 Request 对象

c# - .net core解析配置接口(interface)

c# - 无法在 ASP.NET Core 2 应用程序上注销 identityserver4 的 OpenIdConnect 身份验证

c# - 环境变量在配置提供程序中不可见

asp.net - 在 IIS 上托管 Asp.Net Core 2

c# - 通过属性或 setter 方法的 ASP.NET Core MVC 依赖注入(inject)

c# - 在内存中创建一个 "directory"?

c# - 如何在使用 XmlSerializer 保留内容的同时更改根元素名称?

c# - 我可以动态创建一个 Expression<Func<T, bool>> 谓词,但是如何创建 Expression<Func<T1,T2,bool>>

c# - 在 HQL 查询的 "where"子句中使用日期