C# Web API HttpGetAttribute错误
我正在制作一个用于访问SQL Server数据库的API。我已经编写了我需要的模型和类,所以现在需要创建一个用于连接所有内容的控制器 我现在的控制器代码是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
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);
}