Kabul başlığında içerik anlaşması kullanarak sürüm tabanlı API'ye ulaşmak istiyoruz.ASP.NET Web API Sözleşme Sürümleri
Bazı kalıtım ve varsayılan HTTP seçiciyi genişletme denetleyicisi & API yöntemleri için elde edebiliyoruz.
Kontrolör miras Biz sürümünde değişiklik ile daha az kod yapmak mimarisi yukarıda oluşturduk
public abstract class AbstractBaseController : ApiController
{
// common methods for all api
}
public abstract class AbstractStudentController : AbstractBaseController
{
// common methods for Student related API'sample
public abstract Post(Student student);
public abstract Patch(Student student);
}
public class StudentV1Controller : AbstractStudentController
{
public override Post([FromBody]Student student) // student should be instance of StudentV1 from JSON
{
// To Do: Insert V1 Student
}
public override Patch([FromBody]Student student) // student should be instance of StudentV1 from JSON
{
// To Do: Patch V1 Student
}
}
public class StudentV2Controller : AbstractStudentController
{
//
public override Post([FromBody]Student student) // student should be instance of StudentV2 from JSON
{
// To Do: Insert V2 Student
}
}
public abstract class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class StudentV1 : Student
{
}
public class StudentV2 : Student
{
public string Email { get; set; }
}
, sürüm 1 10 API yöntemini varsa söylemek ve bir API bir değişiklik olduğunda, aşağıdaki örnek kodu kullanarak elde edilir yöntem, diğer 9'u değiştirmeden sürüm 2 kodunda bulunmalıdır (sürüm 1'den devralınır). Şimdi, karşılaştığımız temel sorun, soyut bir öğrencinin bir örneğini başlatamadığımız için sözleşme versiyonudur. Birisi, JSON'a API 1 sürümü gönderdiğinde, StudentV1'in 1 sürümü, yöntemlerde geçirilmeli ve 2. sürümde aynı olmalıdır.
Bunu başarmanın bir yolu var mı?
Şimdiden teşekkürler!
bu gibi görünüyor: http://stackoverflow.com/questions/21306305/binding-abstract-action-parameters-in-webapi –
Teşekkür @DanielStackenland !! Yayınlanmış JSON'u tanımlamak için productType gibi yaygın bir alanımız yok. Ayrıca, gerektiğinde daha sonra kullanılacak olan, API'daki öğrenci gibi yaklaşık 50 - 70 dersimiz olacaktır. –
Her neyse, AbstractStudentController'ın amacı nedir? Neden sadece StudentV1Controller'ın (ve V2) AbstractBaseController'ı miras bırakıp StudentV1 (ve V2) parametresini kullanmasına izin vermiyorsunuz? –