Asp.net core mvc Net核心MVC如何处理匹配多个端点的请求

Asp.net core mvc Net核心MVC如何处理匹配多个端点的请求,asp.net-core-mvc,asp.net-apicontroller,Asp.net Core Mvc,Asp.net Apicontroller,我正在开发一个有食谱的应用程序。 我写了删除配方的方法,这个工作很好,但后来不得不添加从配方中删除照片的方法。 使用Api开发核心3.1.1 当我尝试使用2种删除方法时,出现此错误 我的代码: namespace RecipesApp.API.Controllers { [Authorize] [Route("api/users/{userId}/recipes/{recipeId}/photos")] [Route("api/users/{userId}/recipe

我正在开发一个有食谱的应用程序。 我写了删除配方的方法,这个工作很好,但后来不得不添加从配方中删除照片的方法。 使用Api开发核心3.1.1

当我尝试使用2种删除方法时,出现此错误

我的代码:

namespace RecipesApp.API.Controllers
{
    [Authorize]
    [Route("api/users/{userId}/recipes/{recipeId}/photos")]
    [Route("api/users/{userId}/recipes")]
    [Route("api/[controller]")]
    [ApiController]
    public class RecipesController : ControllerBase
    {




// http://localhost:5000/api/users/{userId}/recipes/{id}
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteRecipe(int userId, int id)
        {


        }


  [HttpDelete("{id}")]
        public async Task<IActionResult> DeletePhoto(int recipeId, int id)
        {



        }
路由注释在类定义上必须是唯一的,并且主要用于为控制器路径添加前缀。Http*注释位于控制器公共方法上,它们的值表示分配给每个方法的唯一路径

结合路由和Http*您将获得分配给方法的完整模板路径。据此,您的代码必须如下所示:

namespace RecipesApp.API.Controllers
{
    [Authorize]
    [Route("/api/users/{userId}/[controller]")]
    [ApiController]
    public class RecipesController : ControllerBase
    {

        // /api/users/{userId}/recipes/{id}
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteRecipe(int userId, int id)
        {
            //
        }


        // /api/users/{userId}/recipes/{id}/photos
        [HttpDelete("{id}/photos")]
        public async Task<IActionResult> DeletePhoto(int recipeId, int id)
        {
            //
        }
    }
}

方法DeletePhoto不起作用,因为recipeId缺失,我需要路径:///api/users/{userId}/recipes/{id}/photos/{recipeId},我改为:[HttpDelete{recipeId}/photos/{id}],现在这是我想要的。问题解决了。谢谢你的回答!