C# 未使用属性调用HttpGet方法
C# 未使用属性调用HttpGet方法,c#,asp.net-core,C#,Asp.net Core,GetItems方法工作正常,但属性为“id”的GetItem不正常。我在发送get请求时返回了所有项目,这意味着调用了GetItems()。我错过了什么 // GET request: https://localhost:xxxxx/api/Items // Working [HttpGet] public async Task<ActionResult<IEnumerable<Item>>> GetItems() { return await _c
GetItems
方法工作正常,但属性为“id”的GetItem
不正常。我在发送get请求时返回了所有项目,这意味着调用了GetItems()
。我错过了什么
// GET request: https://localhost:xxxxx/api/Items
// Working
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems()
{
return await _context.items.ToListAsync();
}
// GET request: https://localhost:xxxxx/api/Items/2
// Not running
[HttpGet("{id}")]
public async Task<ActionResult<Item>> GetItem(long id)
{
var item = await _context.items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return item;
}
在Startup.cs中配置方法:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
检查具有以下行的启动:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
同时检查第一项:
[HttpGet("{id:int}")]
您也可以这样做:
GET request: https://localhost:xxxxx/api/GetItems?name=aaa
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems(string name)
{
var item = await _context.items.Where(x => x.Name == name).ToListAsync();
if (item == null)
{
return NotFound();
}
return item;
GET请求:https://localhost:xxxxx/api/GetItems?name=aaa
[HttpGet]
公共异步任务GetItems(字符串名称)
{
var item=await_context.items.Where(x=>x.Name==Name.toListSync();
如果(项==null)
{
返回NotFound();
}
退货项目;
}您可以将
操作
添加到路线
,如下所示:[Route(“api/[controller]/[Action]”)
,下面是一个工作演示:
[Route("api/[controller]/[action]")]
[ApiController]
public class ItemsController : ControllerBase
{
//...
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems()
{
return await _context.Items.ToListAsync();
}
[HttpGet]
public async Task<ActionResult<Item>> GetItemById(int id)
{
var item = await _context.Items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return item;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItemByName(string name)
{
var item = await _context.Items.Where(x => x.Name == name).ToListAsync();
if (item == null)
{
return NotFound();
}
return item;
}
}
[路由(“api/[控制器]/[操作]”)
[ApiController]
公共类项控制器:控制器库
{
//...
[HttpGet]
公共异步任务
2:https://localhost:xxxxx/api/Items/GetItemById?id=xx
结果:
3:https://localhost:xxxxx/api/Items/GetItemByName?name=xx
结果:
后请求:
https://localhost:xxxxx/api/Items/todoitem
结果:
使用路由属性装饰控制器,如下所示:
[ApiController]
[Route("api/Items")]
public class ItemsController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems()
{
return await _context.items.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Item>> GetItem(long id)
{
var item = await _context.items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return item;
}
}
[ApiController]
[路线(“api/项目”)]
公共类项控制器:控制器库
{
[HttpGet]
公共异步任务GetItems()
{
return wait_context.items.toListSync();
}
[HttpGet(“{id}”)]
公共异步任务GetItem(长id)
{
var item=wait_context.items.FindAsync(id);
如果(项==null)
{
返回NotFound();
}
退货项目;
}
}
然后,您应该能够通过使用请求参数(如https://localhost:xxxxx/api/Items/2
能否请您分享您的代码,该代码称为endapoints?以及您的路线谢谢您的帮助。路线已如您所述。当我发送时,我收到一个405错误(不允许使用方法)。谢谢,使用此解决方案,我不再使用GetItemById和GetItemByName获取所有项目,但由于每次调试时都会清除数据,因此我只得到“404 not found”。Post方法不适用于返回“HTTP错误400.请求URL无效”的此解决方案。我已经添加了我的POST方法代码。唯一有效的方法是GetItems不返回代码为200的数据。您正在清除什么类型的数据?为什么在清除数据后会导致404错误?正常情况下,这不会影响路由。您的POST方法将返回400,因为您没有传递正确的参数类型。我更新了我的答案,并且你可以看到post方法工作正常。我创建的所有项目都会在新的调试中从服务器上删除。我正在按照说明进行操作,在修复post方法后,它现在正在与你的解决方案一起工作-URL不包括该操作。非常感谢。
[Route("api/[controller]/[action]")]
[ApiController]
public class ItemsController : ControllerBase
{
//...
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems()
{
return await _context.Items.ToListAsync();
}
[HttpGet]
public async Task<ActionResult<Item>> GetItemById(int id)
{
var item = await _context.Items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return item;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItemByName(string name)
{
var item = await _context.Items.Where(x => x.Name == name).ToListAsync();
if (item == null)
{
return NotFound();
}
return item;
}
}
[ApiController]
[Route("api/Items")]
public class ItemsController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<Item>>> GetItems()
{
return await _context.items.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Item>> GetItem(long id)
{
var item = await _context.items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return item;
}
}