2种张贴方法无法达到我的终点

问题描述

我真的很难在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

测试结果

blanket implementation

,

您可以尝试提出同样的请求吗?

  [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
    }