2017-05-02 23 views
10

Varsayılan Değerler denetleyicisi ile temel bir WebApi uygulama kurulumum var.'DefaultInlineConstraintResolver' neden 'apiVersion' çözümünü alamıyor

reading a blog about RESTful WebApi Versioning'dan sonra paketi yeni bir WebApi projesine dahil etmeye karar verdim.

API'mn sürümüne yardımcı olmak için Microsoft.AspNet.WebApi.Versioning adlı NuGet paketini ekledim. İşte ben takip ediyorum paketler yapılandırma talimatlarına URL:

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

değerlerim kontrolör çok basittir. Dekorasyonu Get metoduna ekledim.

[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) 
{ 
} 
} 

Ben kontrolöre aşağıdaki kod satırını ekleyin olarak bütün iş patlarsa en kısa sürede, ne yazık ki: İşte

[Route("api/v{version:apiVersion}/values")] 

olan hata mesajı bir bakıştır İşte kod iade edilen: Burada
The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'apiVersion'. 

Line 82:    GlobalConfiguration.Configure(WebApiConfig.Register); 

benim Startup.cs

içinde var kodudur

AddApiVersioning'i çağırmak ve belgede özetlendiği şekilde constraintResolver'ı sağlamanın sorunu çözeceğini düşünmüştüm, ancak bunu yapmadı. Şimdi ne yapacağım ile mücadele ediyorum.

config.AddApiVersioning(); 
      var constraintResolver = new DefaultInlineConstraintResolver() 
      { 
       ConstraintMap = 
       { 
        ["apiVersion"] = typeof(ApiVersionRouteConstraint) // or mvc routing? 
       } 
      }; 
      config.MapHttpAttributeRoutes(constraintResolver); 

Herhangi bir öneriniz var mı?

cevap

10

Sen WebApiConfig.cs sürüm yolları haritalama önce

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

dosyasını çözmelidir. Config.Routes.MapHttpRoute() önce

+0

Hiçbir WebApiConfig.cs yok, OWIN startup.cs sınıfını kullanıyorum ve herhangi bir yolu eşleme önce kısıt çözümleyicisi ayarlanıyor. – Zoop

+1

ConfigureAuth (app) sahibi olmalısınız; [derleme: OwinStartup (typen (Owin.Startup))] sınıfında, bu sınıfa gidebilir ve Microsoft.AspNet.WebApi.Versioning nuget'i ekleyerek kodun üzerine enjekte edebilirsiniz. – Champ

+0

Doğru, şimdi sadece Swagger'ın rotaları nasıl tanıması gerektiğini anlamaya çalışmalıyım. Cevap için teşekkürler! – Zoop

İlgili konular