Asp.Net Core MVC 如何处理请求匹配多个端点
Asp.Net Core MVC How to handle The request matched multiple endpoints
我正在开发带有食谱的应用程序。
我写了删除食谱方法,这工作正常,但后来不得不添加从食谱中删除照片的方法。
使用 Api 的
开发 Core 3.1.1
当我尝试使用 2 "Delete" 方法时出现此错误
我的代码:
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)
{
}
Route
注解在class定义上必须是唯一的,主要用于控制器路径的前缀。 Http*
注释在控制器 public 方法上进行,它们的值表示分配给每个方法的唯一路径。
结合(Route
和 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)
{
//
}
}
}
我正在开发带有食谱的应用程序。 我写了删除食谱方法,这工作正常,但后来不得不添加从食谱中删除照片的方法。 使用 Api 的
开发 Core 3.1.1当我尝试使用 2 "Delete" 方法时出现此错误
我的代码:
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)
{
}
Route
注解在class定义上必须是唯一的,主要用于控制器路径的前缀。 Http*
注释在控制器 public 方法上进行,它们的值表示分配给每个方法的唯一路径。
结合(Route
和 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)
{
//
}
}
}