Я пользовался WebApi уже несколько лет, но теперь, похоже, он не работает.В недавнем проекте asp.net .NET Framework я добавил WebApi в существующее решение MVC.Я использую пакет nuget Microsoft.AspNet.WebApi.Versioning 3.0.1
Ниже приведена конфигурация приложения:
Global.asax
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning();
//config.MapHttpAttributeRoutes(); //commented due to route versioning
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
контроллер API находится в папке /Controller/v1/MyControllerAPI.cs
MyControllerAPI.cs
namespace MyProject.Controllers
{
[AllowAnonymous]
[ApiVersion("1")]
[RoutePrefix("api/v{version:apiVersion}/MyControllerAPI")]
public class MyControllerAPI : ApiController
{
private ApplicationDbContext db = new ApplicationDbContext();
[HttpGet]
[Route("GetMonthly")]
public IQueryable<Monthly> GetMonthly()
{
return db.Monthly;
}
}
}
с помощью Postman, вызывающего API GET: https://localhost:44377/api/v1/MyControllerAPI/GetMonthly
, он возвращает эту ошибку:
{
"Error": {
"Code": "ApiVersionUnspecified",
"Message": "An API version is required, but was not specified."
}
}
Что не так в моей конфигурации?Я уверен, что раньше использовал подобную конфигурацию, и она сработала.