Asp.Net Core MVC如何处理请求匹配多个端点

时间:2020-02-26 20:42:38

标签: asp.net-core-mvc asp.net-apicontroller

我正在使用食谱制作应用程序。 我写了删除食谱的方法,这工作正常,但随后必须添加从食谱中删除照片的方法。 在Api的Core 3.1.1上工作

当我尝试使用2个“删除”方法时出现此错误 enter image description here

我的代码:

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)
        {



        }

1 个答案:

答案 0 :(得分:1)

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

组合(RouteHttp*),您将获得分配给您的方法的完整模板路径。据此,您的代码必须如下所示:

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)
        {
            //
        }
    }
}