【发布时间】:2019-06-17 10:48:06
【问题描述】:
我有一段时间没有写 api 了(最后一次是在 asp.core 2.0 中)所以今天决定在 .core 2.1 版本中创建一个新的,不幸的是发现我的操作不像以前那样工作了以前的版本。
几个小时后,我发现这个问题导致[Route("api/[controller]")] 和 since[ApiController] 没有它就无法工作,我对它们都发表了评论,并且一切正常。
**那么任何人都可以解释我应该怎么做才能使此代码与'[ApiController]' unconnebt 和相同的操作 URL 调用一起工作?
//[Route("api/[controller]")]
//[ApiController]
public class TestController : ControllerBase
{
[HttpGet("api/[controller]")]
public string A1()
{
return "A1()";
}
[HttpGet]
public string A2(int id)
{
return $"A2(int {id})";
}
[HttpGet]
public string A3(string p1,string p2)
{
return $"A3(string {p1},string {p2})";
}
[Route("api/[controller]/A4/{id}")]
[HttpGet]
public string A4(int id)
{
return $"A4(int {id})";
}
[HttpGet("api/[controller]/A5/{id}")]
public string A5(int id)
{
return $"A5(int {id})";
}
}
` 启动.css
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{……///code
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}");
});
}
- https://localhost:5001/api/Test
- https://localhost:5001/api/Test/A2?id=1
- https://localhost:5001/api/Test/A2/1
- https://localhost:5001/api/Test/A3?p1=test&p2=test
- https://localhost:5001/api/Test/A4/1
- https://localhost:5001/api/Test/a5/1
测试1: 我根据@chris-pratt 的回答进行了更改
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet("")]
public string A1()
{
return "A1()";
}
[HttpGet("A2")]
[HttpGet("A2/{id}")]
public string A2([FromQuery]int id)
{
return $"A2(int {id})";
}
[HttpGet("A3")]
public string A3([FromQuery]string p1, [FromQuery]string p2)
{
return $"A3(string {p1},string {p2})";
}
[HttpGet("A4")]
public string A4([FromQuery]int id)
{
return $"A4(int {id})";
}
[HttpGet("A5")]
public string A5([FromQuery]int id)
{
return $"A5(int {id})";
}
}
网址调用:
- 好的
- 好的
- id=0
- 好的
- 404
- 404
5&6 现在是一样的
【问题讨论】:
-
对于#3,您告诉路由器将路由模式中的 {id} 绑定到方法参数,然后告诉方法参数绑定到 [FromQuery]...似乎 [FromQuery] 获胜(您在 #3 url 中没有 ?id=1 )。 #4 和 #5 的 URL 与路由路径不匹配(URL 以 A4/1 结尾,但路由显示“A4”...您可能打算拥有 Route("A4/{id}") 然后删除它[FromQuery] 在方法签名中)
标签: asp.net-core asp.net-core-webapi asp.net-core-2.1