C# 如何在web API中调用接受相同参数类型的GET方法
我有一个名为Issues的模型,它具有Id和severity属性,这些属性是整数,还有一个issuecontroller,它应该处理GET请求并按严重性返回所有问题。既然dotnetapi不支持相同的参数类型,比如int,我该怎么做呢 我尝试使用不同的方法名称,例如C# 如何在web API中调用接受相同参数类型的GET方法,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我有一个名为Issues的模型,它具有Id和severity属性,这些属性是整数,还有一个issuecontroller,它应该处理GET请求并按严重性返回所有问题。既然dotnetapi不支持相同的参数类型,比如int,我该怎么做呢 我尝试使用不同的方法名称,例如Get()和GetBySeverity(int severity),但出现了不明确的异常 这是我的控制器 [路由(“api/[控制器]”)] [ApiController] 公共类问题控制器:ControllerBase { [
Get()
和GetBySeverity(int severity)
,但出现了不明确的异常
这是我的控制器
[路由(“api/[控制器]”)]
[ApiController]
公共类问题控制器:ControllerBase
{
[HttpGet(Name=“issues”)]
公共IEnumerable GetAllIssues(){
IssueService服务=新的IssueService();
return service.GetIssues();
}
[HttpGet]
公共IEnumerable GetBySeverity([FromQuery(Name=“severity”)]int severity)
{
IssueService服务=新的IssueService();
返回服务。GetIssuseBySeverity(严重性);
}
}
这些是我想要开发的API/api/issues/
和
/api/issues/?severity=1
像这样
//GET api/issues/5
[HttpGet("{id}")]
public Issue GetByRoute([FromRoute(Name="id")] int id)
{
IssueService service = new IssueService();
return service.GetIssueById(id);
}
[HttpGet()]
public Issue GetByQuery([FromQuery(Name="severity")] int severityId)
{
IssueService service = new IssueService();
return service.GetIssueById(severityId);
}
这是一个不明确的引用,因为这两个操作都是
HttpGet
,路由引擎无法决定要采用哪条路由或您指的是哪条路由
Web Api控制器使用HttpVerbs而不是操作/方法名称(如MVC)进行路由
我会用。这使用路由(“myroute”)
来定义路由
// GET api/issues/severity/5
[Route("severity/{severity}")]
[HttpGet()]
public IEnumerable<Issue> GetBySeverity(int severity)
{
IssueService service = new IssueService();
return service.GetIssuesBySeverity(severity);
}
// GET api/issues/5
[HttpGet("{id}")]
public Issue Get(int id)
{
IssueService service = new IssueService();
return service.GetIssueById(id);
}
以上操作将转到
api/issues?id=1
和api/issues/severity?severity=1
查看Get方法上方的注释尝试以这种方式调用它。我已经更新了问题,您可以看一看,问题在于GetAllIssues和GetBySeverity,即使我添加了名称标记,问题仍然存在。我认为这是因为它们有相同的返回类型。控制器不知道使用哪个操作。您需要指定不同的路由。为什么不使用api/issue/severity/1
按严重性获取问题?如果要执行此操作,请在操作上方添加Route(“severity/{severity}”)
。name参数不会做任何事情,[Route()]
是您想要使用的。否则,将您的方法重构为一个,您可能需要额外的参数来实现这一点@耐多药
// GET api/issues/severity?severity=5
[HttpGet("severity")]
public IEnumerable<Issue> GetBySeverity([FromQuery] int severity)
{
IssueService service = new IssueService();
return service.GetIssuesBySeverity(severity);
}
// GET api/issues?id=5
[HttpGet()]
public Issue Get([FromQuery] int id)
{
IssueService service = new IssueService();
return service.GetIssueById(id);
}