2012-09-25 12 views
23

Parametre isteği Web API kullanılarak her zaman geçersizdir. Ben parametreler gibi basit tipler yerine bir parametre olarak güçlü bir şekilde yazılmış bir nesne kullanarak bir şey eksik.ASP.NET MVC Web API'sı QueryString'i Güçlü Şekilde Yazılan Parametrelere Eşleştirmeyin

URL

http://localhost:2222/api/v1/divisions?EventId=30 

Kontrolör Eylem

public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request) 
     { 
      return _apiDivisionsService.GetDivisions(request); 
     } 

Nesne

public class ApiDivisionsRequest : ApiAuthorizedRequest 
    { 
     public ApiDivisionsRequest() 
     { 
      Page = 1; 
      PageSize = 10; 
     } 

     public int EventId { get; set; } 
     public int PageSize { get; set; } 
     public int Page { get; set; } 
     public string[] Includes { get; set; } 
    } 

cevap

47

Ben çok güçlü r davet Web API'sında parametre bağının nasıl çalıştığını daha iyi anlamak için following article nolu sayfayı okuyun. Bunu okuduktan sonra, varsayılan olarak Web API'sının sorgu dizesi parametrelerini ilkel türlere bağladığını ve gövde türlerini karmaşık türlere göndermesini anlayacağını anlayacaksınız.

Yani karmaşık türleri için sorgu dizesi parametrelerini bağlamak gerekirse [FromUri] parametre ile parametre dekorasyon bu varsayılan davranışı geçersiz kılmak gerekir:

public virtual ApiDivisionsResponse Get([FromUri] ApiDivisionsRequest request) 
{ 
    ... 
} 

Ve evet, sana katılıyorum - bu var karışıklık - model bağlama cehennem düz ASP.NET MVC'de çok kolay ve Web API'sinde bir kabus yarattı. Ama bir kez nasıl çalıştığını öğrendikten sonra tuhaflıklardan kaçınacaksınız.

+4

Bir kabus bunun yarısı değildi. ASP.Net mürettebatının hemen hemen her şeyin "The Aptal, O Burns!" Için poster çocuğu olduğunu düşünüyor. AjaxControlToolkit, ve şimdi bu kürtaj ... – jerhewet

+1

@jerhewet Bu saçma web formları bileşenlerinin bazılarını oluştururken sürüş faktörleri olduğunu fark edin. Müşteri talebi ve Microsoft, Java dünyasından tekliflerle rekabet ediyordu. Bugün sahip olduğumuz bu büyük ekosistem, ASP.NET Webformlarının ve diğerlerinin adım taşları için olmasaydı, varolmayabilirdi. –

İlgili konular