C# Web API HttpGetAttribute错误

C# Web API HttpGetAttribute错误,c#,asp.net-web-api,C#,Asp.net Web Api,我正在制作一个用于访问SQL Server数据库的API。我已经编写了我需要的模型和类,所以现在需要创建一个用于连接所有内容的控制器 我现在的控制器代码是 using Microsoft.AspNetCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using EPOSDatabase_API.DataProvider; using EPOS

我正在制作一个用于访问SQL Server数据库的API。我已经编写了我需要的模型和类,所以现在需要创建一个用于连接所有内容的控制器

我现在的控制器代码是

using Microsoft.AspNetCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EPOSDatabase_API.DataProvider;
using EPOSDatabase_API.Models;
using System.Web.Http;

namespace EPOSDatabase_API.Controllers
{

[Route("api/[controller]")]
public class CategoryController : ApiController
{
    private ICategoryDataProvider categoryDataProvider;

    public CategoryController(ICategoryDataProvider categoryDataProvider)
    {
        this.categoryDataProvider = categoryDataProvider;
    }

    [HttpGet]
    public async Task<IEnumerable<Category>> Get()
    {
        return await this.categoryDataProvider.GetCategories();
    }

    [HttpGet("{id}")]
    public async Task<Category> Get(int Category_ID)
    {
        return await this.categoryDataProvider.GetCategory(Category_ID);
    }

    [HttpPost]
    public async Task Post([FromBody]Category category)
    {
        await this.categoryDataProvider.AddCategory(category);
    }

    [HttpPut("{id}")]
    public async Task Put(int Category_ID, [FromBody]Category category)
    {
        await this.categoryDataProvider.UpdateCategory(category);
    }

    [HttpDelete("{id}")]
    public async Task Delete(int Category_ID)
    {
        await this.categoryDataProvider.DeleteCategory(Category_ID);
    }
  }
}

使用Microsoft.AspNetCore;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用ePSDatabase_API.DataProvider;
使用EPOSDatabase_API.Models;
使用System.Web.Http;
命名空间EPOSDatabase_API.Controllers
{
[路由(“api/[控制器]”)]
公共类类别控制器:ApiController
{
专用ICategoryDataProvider类别DataProvider;
公共类别控制器(ICategoryDataProvider categoryDataProvider)
{
this.categoryDataProvider=categoryDataProvider;
}
[HttpGet]
公共异步任务Get()
{
return wait this.categoryDataProvider.GetCategories();
}
[HttpGet(“{id}”)]
公共异步任务Get(int Category\u ID)
{
return wait this.categoryDataProvider.GetCategory(Category_ID);
}
[HttpPost]
公共异步任务发布([FromBody]类别)
{
等待此.categoryDataProvider.AddCategory(category);
}
[HttpPut(“{id}”)]
公共异步任务Put(int Category\u ID,[FromBody]Category)
{
等待此.categoryDataProvider.UpdateCategory(类别);
}
[HttpDelete(“{id}”)]
公共异步任务删除(int Category\u ID)
{
等待此.categoryDataProvider.DeleteCategory(Category_ID);
}
}
}
但是对于线路

[HttpGet({id}”)]
[HttpPut({id}”)]
[HttpDelete({id}”)]
我收到一个错误

“HttpGet/Put/DeleteAttribute”不包含接受1个参数的构造函数

为什么会发生此错误?我是否缺少使用引用的

[HttpGet]
[HttpGet]
public async Task<Category> Get(int id)
{
    return await this.categoryDataProvider.GetCategory(Category_ID);
}
公共异步任务Get(int-id) { return wait this.categoryDataProvider.GetCategory(Category_ID); }

[路由(“{id}”)]
公共异步任务Get(int-id)
{
return wait this.categoryDataProvider.GetCategory(Category_ID);
}
双方都应该这样做。 ASP.NET Web API知道如何将方法签名与传入请求相匹配。 或者,如果要更改默认行为,则必须将变量名保留为方法签名中的参数名


您可以在ASP.NET Web API 2中阅读更多关于属性路由的信息。

文档中说,您可以使用它来指定路由模板。。尽管我担心底层机制可能不允许仅使用
{id}
。是否尝试导入
Microsoft.AspNetCore.Mvc
?似乎与
System.Web.Mvc
冲突。
使用Microsoft.AspNetCore
使用System.Web.Http–您正在混合ASP.NET核心和经典ASP.NET MVC。这是一个非常糟糕的主意,会被打破的。只选择一个。@BagusTesa是的,我尝试过,但尝试时,Mvc(非核心)的名称空间Microsoft.AspNetCore中不存在类型或名称空间“Mvc”。您可以使用路由属性指定路由参数。如果您是从ASP.NET Mvc项目(非核心)开始的,然后你最好从零开始,手动改变你的逻辑。从项目文件开始,有些东西会1:1转换,但很多东西不会。
[Route("{id}")]
public async Task<Category> Get(int id)
{
   return await this.categoryDataProvider.GetCategory(Category_ID);
}