Привет ниже, мой сценарий
У меня есть PersonController с методом CreatePerson
[ApiVersion(ApiControllerVersion.Version1)]
public class PersonController : BaseController
{
[HttpPost]
[Route("/person")]
[Produces("application/json")]
[SwaggerResponse((int)HttpStatusCode.OK)]
[SwaggerResponse((int)HttpStatusCode.InternalServerError, Type = typeof(ErrorServiceResponse))]
[SwaggerResponse((int)HttpStatusCode.BadRequest, Type = typeof(ErrorServiceResponse))]
[SwaggerOperation("POST: Create Person")]
[ValidateModelState]
public async Task<IActionResult> CreatePerson([FromBody][Required] CreatePersonRequest person)
{
}
[HttpPut]
[Route("/person")]
[Produces("application/json")]
[SwaggerResponse((int)HttpStatusCode.OK)]
[SwaggerResponse((int)HttpStatusCode.InternalServerError, Type = typeof(ErrorServiceResponse))]
[SwaggerResponse((int)HttpStatusCode.BadRequest, Type = typeof(ErrorServiceResponse))]
[SwaggerOperation("POST: Change Person")]
[ValidateModelState]
public async Task<IActionResult> UpdatePerson([FromBody][Required] UpdatePersonRequest person)
{
}
}
Я хотел создать другую версию этого API, созданную, как показано ниже, потому что мой маршрут создания изменен. Где я наследую PersonController, потому что я хочу, чтобы все методы из V1 и изменились от v2, кроме «CreatePerson»
[ApiVersion(ApiControllerVersion.Version2)]
public class PersonControllerV2 : PersonController
{
[HttpPost]
[Route("/persons")]
[Produces("application/json")]
[SwaggerResponse((int)HttpStatusCode.OK)]
[SwaggerResponse((int)HttpStatusCode.InternalServerError, Type = typeof(ErrorServiceResponse))]
[SwaggerResponse((int)HttpStatusCode.BadRequest, Type = typeof(ErrorServiceResponse))]
[SwaggerOperation("POST: Create Person")]
[ValidateModelState]
public new async Task<IActionResult> CreatePerson([FromBody][Required] CreatePersonRequest person)
{
}
}
Если я не изменю маршрут, я вижу VOST POST / person и V2 POST / person работает нормально, однако
, когда я изменяю свой маршрут V2 на "/ people" с "/ person" для CreatePerson в соответствии с моим требованием, тогда я получаю ошибку ниже при вызове V1 POST / person от swagger
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: запрос соответствует нескольким конечным точкам. Controllers.PersonControllerV2.CreatePerson Controllers.PersonController.CreatePerson
В этом случае мой
V1 swagger показывает
- POST / person
- PUT / человек
V2 чванство показывает
- POST / человек
- POST / человек
- PUT / person
Есть идеи или предложения по решению этой проблемы?