2013-05-10 51 views
5

RestSharp kullanarak konsola erişmeye çalıştığım bir Web API hizmetim var. Benim RestSharp kodu şöyle:RestSharp ile Web API çağrıları - uygulama/json'u gövdeye gönderir eylemde null parametresine neden olur

  RestClient client = new RestClient(baseUrlString); 
     RestRequest request = new RestRequest("controllername/actionname"); 
     request.RequestFormat = DataFormat.Json; 

     ProcessQuestion model = new ProcessQuestion() 
     { 
      Id = "123456", 
      InstanceId = "123", 
      UniqueId = "bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626", 
      PostedAnswer = new Dictionary<string, string>() { { "question_7907_1", "selected" }, { "question_7907_2", "selected" } } 
     }; 
     request.AddBody(model); 

     var response = client.Execute(request) 

My Web API eylem yukarıdaki model olarak aynı parametrelere sahip bir model alır. Çağrı yürütüldüğünde, bağlama başarısız olur ve parametre sıfırdır.

{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}} 

I vücudun düzgün modeli bağlanan Fiddler'ı kullanılarak sonrası ise aşağıda gösterildiği gibi bu vücut değerine RestRequest.AddBody yöntemi prepending uygulama/json nedeniyle şüpheli. fiddler vücut değer application/json anahtarını prepending dışında aynı olduğunu

{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}} 

Not: Aşağıda ben Fiddler sağlanan vücut değeridir.

Ayrıca dikkat edilmesi gerekenler: Her şeye benzeyen şeyi denedim ... Parametreleri eylemde ayırdım, FromBody ve FromUri özniteliklerini kullandım, özel DictionaryModelBinder'in denemesini denedim, özel ValueBinders denedim; RestSharp kullanarak m (bir RequestBody parametresiyle AddParameter, AddObject, farklı URL stilleri, vb.).

Bunu başka biriyle karşılaştı mı, eğer öyleyse, çözdünüz mü? Bu hizmet için Web API'yı seçtim ve modelin bağlanması MVC'de olduğu gibi çalışırdı, ancak durumun böyle olmadığını görüyorum.

sayesinde

DÜZENLEME (çözüldü): RestSharp otomatik AddBody yönteminde geçirilen nesnelerin JsonSerializer kullanır. Ben basit bir şey eksik olduğunu düşündüm, ve gerçekten de ... Ben RestRequest somutlaşma Method.Post parametresi ekleme sorunu çözdü.

cevap

6
  1. isteği oluştururken yöntemini belirtir:

    RestRequest request = new RestRequest("controllername/actionname", Method.POST);

  2. Değil varsayılan serileştirici vücut için ne olduğundan emin - Eğer açık hale deneyebilirsiniz:

    request.AddBody(request.JsonSerializer.Serialize(model));

  3. 'Uygulama/json' nereden geliyor - Bu Conte nt-Type header, isteğinizle birlikte göndermelisiniz, kesinlikle vücudun bir parçası değil. Bunun yerine bunu:

    request.AddHeader("Content-type", "application/json; charset=utf-8");

  4. bu yardımcı olmazsa, mümkün olduğunca kendi sitelerinde örneğe kodunuzu benzer yapmayı deneyin. Karmaşıklığı kaldırmayı deneyin (gerekli işlevselliği değiştirmek anlamına gelse bile) - çalıştığı ve buna ek işlevsellik kazandıracağı bir noktaya getirin.

http://restsharp.org/

+0

RestSharp otomatik AddBody yönteminde geçirilen nesnelerin JsonSerializer kullanır. Ben basit bir şey eksik olduğunu düşündüm, ve gerçekten de ... Ben RestRequest somutlaşma Method.Post parametresi ekleme sorunu çözdü. Teşekkürler. –

İlgili konular