gpt4 book ai didi

c# - 类型 'DefaultInlineConstraintResolver' 的内联约束解析器无法解析以下内联约束 : 'apiVersion'

转载 作者:IT王子 更新时间:2023-10-29 04:49:41 25 4
gpt4 key购买 nike

我有一个带有默认值 Controller 的基本 WebApi 实现设置。

reading a blog about RESTful WebApi Versioning 之后我决定将该包集成到一个新的 WebApi 项目中。

我添加了 NuGet 包 Microsoft.AspNet.WebApi.Versioning 来帮助我的 API 进行版本控制。这是我遵循的包配置说明的 URL:

https://github.com/Microsoft/aspnet-api-versioning/wiki/Configuring-Your-Application

我的值 Controller 非常简单。我已将装饰添加到我的 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)
{
}
}

不幸的是,一旦我将以下代码行添加到 Controller 中,整个事情就崩溃了:

[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);

这是我的 Startup.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);

有什么建议吗?

最佳答案

您应该在 WebApiConfig.cs 文件中解析版本

     var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);

在映射路由之前。我的意思是在 config.Routes.MapHttpRoute() 之前

关于c# - 类型 'DefaultInlineConstraintResolver' 的内联约束解析器无法解析以下内联约束 : 'apiVersion' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com