问题描述
我真的很难在ASP.NET Core Web API应用程序中达到一个终点
Controller
的相关部分是
[Route("api/[controller]")]
[ApiController]
public class PlanController : BaseApi
{
[HttpPost]
[Route("api/{controller}/Clear/")]
public async Task<ActionResult> Clear() //always returns 404
{ //some code in here
}
[HttpPost]
public async Task<ActionResult> Post([FromBody] Planpoco model) //works as expected
{//more code
}
以及我的Startup.cs文件的相关部分
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "api",pattern: "{api}/{controller}/{id?}");
endpoints.MapControllers();
endpoints.MapRazorPages();
});
在邮递员中,我希望输入https://localhost:12345/api/plan/clear/
,并使其与终点匹配。它不是。它总是返回404
有人可以在这里给我一些建议吗?
解决方法
根据代码,在控制器上应用属性路由[Route("api/{controller}/Clear/")]
,在clear
操作上应用https://localhost:port/api/plan/api/plan/clear
,要请求清除操作方法,应使用以下URL。
[HttpPost("Clear")]
我希望输入https:// localhost:12345 / api / plan / clear /并使其与终点匹配。
要满足您的要求,您可以尝试将Clear
应用于您的[Route("api/[controller]")]
[ApiController]
public class PlanController : ControllerBase
{
[HttpPost("Clear")]
public async Task<ActionResult> Clear()
{ //some code in here
return Ok("Clear Action");
}
[HttpPost]
public async Task<ActionResult> Post([FromBody] PlanPoco model) //works as expected
{//more code
return Ok("Post Action");
}
}
操作方法。
[HttpPost]
[Route("Clear")]
public async Task<ActionResult> Clear() //always returns 404
{
或修改如下代码。
version: '3'
services:
web:
build: .
image: citadel/php7.3
ports:
- "80"
volumes:
- ./src:/home/app/src:cached
container_name: 'studentlaptops'
restart: unless-stopped
tty: true
environment:
- XDEBUG_CONFIG='remote_host=<my-host-name>'
- VIRTUAL_HOST=studentlaptops.docker
#MySQL Service
db:
image: mysql:8.0.1
container_name: sl-db
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: studentlaptops
MYSQL_ROOT_PASSWORD: <password>
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
#Volumes
volumes:
dbdata:
driver: local
测试结果
,您可以尝试提出同样的请求吗?
[Route("api/[controller]/[action]")]
[ApiController]
public class PlanController : BaseApi
{
[HttpPost]
public async Task<ActionResult> Clear() //always returns 404
{ //some code in here
}
[HttpPost]
public async Task<ActionResult> Post([FromBody] PlanPoco model) //works as expected
{//more code
}