2015-12-14 9 views
7

İçinde 2 GET yöntemiyle bir asp.net web api denetleyicisi var. Biri string parametresini kabul eder, diğeri int parametresini kabul eder. Sadece web api ile kurulan varsayılan yol var. URL'de bir int değerini her geçtiğimde, dize parametresini alan GET yöntemi çağrılır. Int parametresini alan GET yöntemi hiçbir zaman çağrılmaz.Aynı web api denetleyicisinde farklı parametre türlerine sahip 2 GET yönteminiz var mı?

Aynı denetleyicide farklı parametre türlerine sahip 2 GET yöntemine sahip olmak mümkün mü?

-Edit- Önerilen yinelenen soru, aynı parametre türleri ile yaklaşık 2 yöntem sorduğu için farklıdır - farklı parametre türleri hakkında soru soruyorum.

cevap

14

Evet, bu mümkün. Varsayılan yapılandırmaya sahip kutunun dışında, searchTerm sorgu dizesi parametresi olarak geçtiğinizi varsayarak çalışmalısınız. Ancak, URL'nin bir parçası olarak örneğin /api/myurl/blah gibi aktarmaya çalışıyorsanız, varsayılan kural yolu, yöntemin int sürümüyle eşleşmesini ve bir hata döndürmesini dener. Varsayılan yapılandırmayı düzenlemeniz veya Attribute Routing kullanmanız gerekir.

Genelde, konvansiyonel MVC yönlendirmesinin WebApi'de daha az kullanışlı olduğunu görüyorum, bu yüzden genellikle onu devre dışı bırakıyorum ve Attribute Routing kullanın.

, nitelik yönlendirmeyi etkinleştirmek için WebAPI config

config.MapHttpAttributeRoutes(); 

ekleyin.

O zaman

/api/myobject?searchTerm=blah 

ve

/api/myobject/1 

ve onlar olmamalı aracılığıyla ikinci yoluyla ilk yöntemini çağırabilirsiniz, Şimdi böyle

[HttpGet] 
[Route("api/myobject/")] 
public HttpResponseMessage GetSearchResults(string searchTerm) 
{ 
    HttpResponseMessage response; 
    //Do Work 
    return response; 
} 

[HttpGet] 
[Route("api/myobject/{id:int}")] 
public HttpResponseMessage Get(int id) 
{ 
    HttpResponseMessage response; 
    //Do Work 
    return response; 
} 

olarak yöntemlerinizi işaretleyebilir çarpışmak. Eğer searchTerm yerine sorgu parametreleri URL'de olmak sahip olmak istiyorsanız

Ancak, tüm kimlikleri yakalayacak

[Route("api/myobject/{searchTerm}")] 

api/myobject/{id:int} rotaya rotayı değiştirebilir ve api/myobject/{searchTerm} yakalayacak en başka herhangi bir şey. Bununla birlikte, URL’nin URL’de kodlanmamış bir şey olmama ihtimaline karşı dikkatli olun.

Tam olarak hangi URL biçimlendirmesini aradığınızı tam olarak bilmiyorum, bu yüzden sağladığım şey sadece basit örneklerdir. Daha önce gönderdiğim link özniteliği yönlendirme daha derinlere doğru deliyor. WebApi'nin MVC'den miras aldığı sözleşmesiyle yönlendirmekten daha karmaşık yollar yapmanızı sağlar.

+0

Mükemmel açıklama - yönlendirilmiş yönlendirme mükemmel çalıştı! – Aaron

+0

Sorun değil. Yardım ettiğine sevindim. –

İlgili konular