C# asp.net WebApi ApiVersionUnspecified返回错误

C# asp.net WebApi ApiVersionUnspecified返回错误,c#,asp.net-web-api2,asp.net-web-api-routing,C#,Asp.net Web Api2,Asp.net Web Api Routing,我已经使用WebApi好几年了,但现在它似乎不起作用。在最近的asp.net.net Framework项目中,我将WebApi添加到现有的MVC解决方案中。我正在使用nuget软件包Microsoft.AspNet.WebApi.Versioning 3.0.1 应用程序配置如下: Global.asax protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfigu

我已经使用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 }
    );
}
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;
        }
    }
}
API控制器位于/controller/v1/MyControllerAPI.cs文件夹中

MyControllerAPI.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 }
    );
}
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;
        }
    }
}

我的配置有什么问题?我敢肯定,我过去也使用过类似的配置,而且效果很好。

我有这样的双HomeController

 [Authorize]
[ApiVersion("1.0")]
public class HomeController : BaseApiController
{
    private ILogger _logger;
    public HomeController(ILogger logger) : base(logger)
    {
        this._logger = logger;
    }
    // GET api/<controller>
    public IEnumerable<string> Get()
    {

        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/<controller>
    public void Post([FromBody]string value)
    {
    }

    // PUT api/<controller>/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/<controller>/5
    public void Delete(int id)
    {
    }
}
[Authorize]
[ApiVersion("2.0")]
public class HomeController : BaseApiController
{
    private ILogger _logger;
    public HomeController(ILogger logger) : base(logger)
    {
        this._logger = logger;
    }
    public IEnumerable<string> Get()
    {

        return new string[] { "value2.0", "value3.0" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/<controller>
    public void Post([FromBody]string value)
    {
    }

    // PUT api/<controller>/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/<controller>/5
    public void Delete(int id)
    {
    }
}
或者您可以在my github repo中查找ApiVersioning和更多功能:)