我有一個基本的WebApi實現設置與默認值控制器。爲什麼'DefaultInlineConstraintResolver'無法解析'apiVersion'
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
我的價值觀控制器是非常簡單的。我已將裝飾添加到我的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);
這裏是我有我的Startup.cs
的內部代碼我認爲調用AddApiVersioning並提供文檔中概述的constraintResolver可以解決問題,但事實並非如此。現在我正在努力接下來要做的事情。
config.AddApiVersioning();
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof(ApiVersionRouteConstraint) // or mvc routing?
}
};
config.MapHttpAttributeRoutes(constraintResolver);
有什麼建議嗎?
沒有WebApiConfig.cs,我使用的是OWIN startup.cs類,並且在映射任何路由之前設置了約束解析器。 – Zoop
您必須擁有ConfigureAuth(app);在[assembly:OwinStartup(typeof(Owin.Startup))] class中,您可以轉到該類並通過添加Microsoft.AspNet.WebApi.Versioning nuget注入上面的代碼。 – Champ
你是對的,現在我只需要弄清楚如何讓Swagger識別路線。感謝你的回答! – Zoop