Когда я проверял это, я инстинктивно удалял дополнительную косую черту /
из префикса маршрута, и это работало.
Поэтому ваша проблема в том, что у вас есть дополнительный слеш в префиксе маршрута, который, я считаю, недопустим.
[RoutePrefix("api/test/")]
вызывает следующую ошибку
"Префикс маршрута api/test/
на контроллере с именем Test
не может заканчиваться символом /
"
Удалить косую черту в конце шаблона маршрута
[RoutePrefix("api/test")]
Следующий тест в памяти использовался для проверки ожидаемого поведения
[TestClass]
public class MyTestClass {
[Test]
public async Task __WebApi_Should_Match_Route() {
//Arrange
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
var httpServer = new HttpServer(config);
var client = new HttpClient(httpServer);
//Act
var response = await client.GetAsync("http://localhost/api/test/age?param=28");
var returnJson = await response.Content.ReadAsStringAsync();
//Assert
response.IsSuccessStatusCode.Should().BeTrue();
var result = JsonConvert.DeserializeObject<int>(returnJson);
result.Should().Be(29);
}
}
[RoutePrefix("api/test")]
public class TestController : ApiController {
[Route("name")]
public string Get(string param) {
return param + 1;
}
[Route("age")]
public int Get(int param) {
return param + 1;
}
}
Также убедитесь, что маршрутизация атрибута должна быть включена до маршрутов на основе соглашения
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Ссылка Маршрутизация атрибутов в ASP.NET Web API 2