2015-01-14 10 views
5

Bir webAPI uyguladık ve birkaç API denetleyicimiz var. API'mız için bir API belgesi sağlıyoruz ve yapmak istediğimiz şey, web yöntemlerini dokümantasyondan hariç tutmaktır, ancak bunun çalıştığımız çevreye bağlı olarak dinamik olarak yapılmasını istiyoruz. sadece seni ne demek istediğimi bir anlayış vermek gerekirse, ben true ApiExplorerSettingAttribute üzerinde IgnoreAPI özelliğini ayarlayarak aşağıdaki web yöntemiDinamik olarak api explorer dokümantasyonu için denetleyicideki WebAPI yöntemini yoksayma

[ApiExplorerSettings(IgnoreApi = true)] 
public Product getProduct() 
{ 
    ... 
} 

var diyelim, bu belgelere web yöntemi ne olduğu dışlar biz İstediğiniz ama "doğru" değeri dinamik olarak ayarlamanın bir yoluna ihtiyacımız var. İdeal olarak, her webMethod için bool değerlerine sahip bir veritabanı tablosuna sahip olmak isteriz ve bunlara dayanarak IgnoreAPi özelliğinin değerini ayarlar. Bunu başarmanın bir yolu var mı? Yardımınız çok takdir edilecektir.

+2

Lütfen sorunun başlığını değiştirmeyi düşünün. Sorunuzu tıklıyorum çünkü dışarıdan arayanlar için yöntem görünürlüğü ile uğraştığını sanıyordum, bu bana asla yöntemin belgelenmesiyle ilgili değildi. – julealgon

cevap

4

Özel bir IApiExplorer uygulayabilir ve bunu kaydedebilirsiniz. Web API'sının hizmetleri, hangi API'ların listelendiğini veya tam olarak kontrol edilmesini sağlar. İşte

Bunun en uygulamaya dev bir blog yazısı var: http://blogs.msdn.com/b/yaohuang1/archive/2012/05/13/asp-net-web-api-introducing-iapiexplorer-apiexplorer.aspx

Ve burada IApiExplorer arayüz tanımı aşağıda verilmiştir: Yapabileceğin http://msdn.microsoft.com/en-us/library/system.web.http.description.iapiexplorer(v=vs.118).aspx

Bir şey türetilen (veya mevcut kaynak yeniden kullanmaktır Mevcut ApiExplorer uygulaması ve varsayılan listeyi almak için base numaralı telefonu arayın ve daha sonra filtreleyin.

Ve s_hewitt yorumuna başına

, öneri:

, ApiExplorer Kaynaklanan iki yöntem ShouldExploreAction uygulanması ve ShouldExploreController gitmek yoludur. Rota, denetleyici ve eylemi temel alarak bu iki yöntemde DB çağrılarınızı yapın.

+0

ApiExplorer'dan türetilen, iki yöntemi uygulayan ShouldExploreAction ve ShouldExploreController gitmenin yoludur. Rota, denetleyici ve eylemi temel alarak bu iki yöntemde DB çağrılarınızı yapın. –

+0

Çok teşekkürler Eilon ve s_hewitt. Bu benim sorunumu çözdü. – CodeExplorer

+0

@s_hewitt teşekkürler, daha iyi görünürlük için metninizi içerecek şekilde cevabımı güncelledim! – Eilon

0

WebAPI'nin belge oluşturma hakkında çok şey bilmiyorum, ancak öznitelikleri biliyorum. Öznitelikler, kodda derlenir ve EXE veya DLL dosyasındaki verilerde doğrudan tutulan sabit kodlanmış değerlerle sonuçlanır. Değiştirilemezler.

Bunu söyledikten sonra, normal derlemeden sonra öznitelikleri ikinci bir küme olarak uygulayabilirsiniz. Belki PostSharp burada yardımcı olabilir? Belki de çözüm konfigürasyonunu değiştirmek, oluşturmak istediğiniz ortamı ve bu metotların IgnoreApi tedavisini hangi yöntemlerle sağladığını göstermenin bir yolu olabilir. Yöntemin hangi ortamlarda göz ardı edilmesini gerektiren yöntemleri uygulamak için kendi özniteliğinizi oluşturabilirsiniz. (Bu veriyi almak için bir veritabanını çağırmazsanız, PostSharp'ta ne istediğinizi yapabileceğinizin daha olası olduğunu düşünüyorum.)