Почему DefaultInlineConstraintResolver' не разрешать 'версия_арі'
у меня есть базовая настройка реализации WebApi с контроллером значений по умолчанию.
после чтение блога о RESTful WebAPI Versioning я решил интегрировать пакет в новый проект WebApi.
я добавил пакет NuGet Microsoft.сеть САШ.Веб-API.Версионность, чтобы помочь с версиями моих API. Вот URL-адрес инструкций по настройке пакетов, которые я следующий:
https://github.com/Microsoft/aspnet-api-versioning/wiki/Configuring-Your-Application
мой контроллер значений очень прост. Я добавил украшение к моему методу Get. Вот код:
[Authorize]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
к сожалению, как только я добавляю следующую строку кода в контроллер, все это взрывается:
[Route("api/v{version:apiVersion}/values")]
вот взгляд на сообщение об ошибке, которое находится вернулся:
The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'apiVersion'.
Line 82: GlobalConfiguration.Configure(WebApiConfig.Register);
вот код, который у меня есть внутри моего запуска.cs
public void Configuration(IAppBuilder app)
{
// HTTP Configuration
HttpConfiguration config = new HttpConfiguration();
//config.MapHttpAttributeRoutes();
// Configure API Versioning
config.AddApiVersioning();
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint ) // or mvc routing?
}
};
config.MapHttpAttributeRoutes(constraintResolver);
// Configure the API to accept token authentication
ConfigureOAuthTokenConsumption(app);
// CORS
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
// Configure the Authorization server
ConfigureOAuth(app);
// Use WebAPI
app.UseWebApi(config);
// Moved from global.asax
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Я думал, что вызов AddApiVersioning и поставка constraintResolver, как описано в документации, устранит проблему, но это не так. Сейчас я борюсь с тем, что делать дальше.
config.AddApiVersioning();
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint ) // or mvc routing?
}
};
config.MapHttpAttributeRoutes(constraintResolver);
какие предложения?
1 ответов
вы должны разрешить версию в WebApiConfig.cs файл
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
перед отображением маршрутов. Я имею в виду до config.Маршруты.MapHttpRoute ()