Мы использовали Microsoft.AspNet.WebApi 5.2.3 в нашем проекте, и мы недавно обновились до 5.2.7, и некоторые из существующих функций перестали работать:
У меня есть FileController:
[ApiVersion("1")]
[RoutePrefix("api/v{version:apiVersion}/file")]
public class FileController : BaseController
{
[HttpPost]
[MapToApiVersion("1")]
[Route("uploadmethod"), Obsolete("The action is marked as obsolete for missing the support for userId. Please use uploadmethod from version 2.")]
public async Task<HttpResponseMessage> UploadFileStream([FromUri] string filePath = null...)
{
}
}
А затем еще один контроллер, который выводится из приведенного выше:
[ApiVersion("2")]
[RoutePrefix("api/v{version:apiVersion}/file")]
public class FileController : Controllers.FileController
{
[HttpPost]
[MapToApiVersion("2")]
[Route("uploadmethod")]
public async Task<HttpResponseMessage> UploadFileWithUserId([FromUri] string userId = null, [FromUri] string filePath = null)
{
//at some point here I call an internal method from the base FileController
}
}
При использовании 5.2.3 следующий код работал нормально:
$"api/v1/file/uploadmethod?filePath={path}";
Теперь, послепри обновлении до 5.2.7 я получаю эту ошибку: "Обнаружено несколько типов контроллеров, соответствующих URL-адресу. Это может произойти, если маршруты атрибутов на нескольких контроллерах соответствуют запрошенному URL-адресу."
Iнужен атрибут MapToApiVersion, потому что мне нужно проверить ниже для успеха.
[Fact]
public async Task UploadFileUsingVersion2NUserId_WillThrowError_MethodsIsMissingOnThatVersion()
{
//...
var url = $"api/v2/file/uploadmethod?filePath={path}";
// When
var response = await api.UploadFile(url, content);
// Then
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
var errorResponse = await response.Content.ReadAsJsonAsync<UnsupportedVersionResponse>();
Assert.Equal("UnsupportedApiVersion", errorResponse.Error.Code);
}
Что изменилось?Как я могу применить v1 только для базового контроллера?