2011-06-17 23 views
10

Ben sözleşmem var:Neden WCF REST POST yönteminde iki bağımsız değişken kullanamıyorum?

[OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, UriTemplate = "GetCategoriesGET/{userIdArg}", BodyStyle = WebMessageBodyStyle.Bare)] 
    List<Video> GetVideosGET(string userIdArg); 

    [WebInvoke(Method = "POST", UriTemplate = "evals")] 
    [OperationContract] 
    void SubmitVideoPOST(Video videoArg, string userId); 

Ve uygulayan yöntemler vardır:

public List<Video> GetVideosGET(string userIdArg) 
{ 

    List<Video> catsToReturn = new List<Video>(); 

    if (Int32.Parse(userIdArg) == 1) 
    { 
     catsToReturn = catsForUser1; 
    } 
    else if (Int32.Parse(userIdArg) == 2) 
    { 
     catsToReturn = catsForUser2; 
    } 

    return catsToReturn; 

    } 


    public void SubmitVideoPOST(Video videoArg, string userId) 
    { 

    } 

ben göz attıklarında:

Server Error in '/' Application. Operation 'SubmitVideoPOST' of contract 'IVLSContentService' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.

:

http://localhost:52587/Api/Content/VLSContentService.svc/GetCategoriesGET/1 

Im bu hatayı alıyorum

POST için yeni bir yöntem eklediğimde (Buraya erişmeyi denediğim) Get isteği üzerine yalnızca bu hatayı almaya başladım, bu ne anlama geliyor? Birden fazla argüman kullanabilir miyim?

cevap

17

Postere aynı soruyu soran bu link'a bir göz atın.

ilgili parçasıdır:

WCF doesn't support more than one parameter with bare body, 
if you need pass several parameters in one post method operation, 
then we need set the BodyStyle to Wrapped. 

Yani aşağıdaki şekilde işlem sözleşmesi değiştirmek zorunda kalacak sizin durumunuzda:

[WebInvoke(Method = "POST", UriTemplate = "evals", BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
[OperationContract] 
void SubmitVideoPOST(Video videoArg, string userId); 
+0

Şerefe evet üzgünüm, tümüyle kafamı karıştırdı, ama şimdi aldım, teşekkürler! – Exitos

+5

Yaptım ama çalışmadı – AMH

+0

Aynı şeyi yaptım, ama işe yaramadı. BodyStyle'ı çıkardım, sonra işe yaradı –

3

Eğer WebGetAttribute üzerinde Bodystyle özelliğini ayarlayarak denedin mi/WebInvokeAttribute, önerilen hata gibi Sarılmış:

6

XML, iki parametreli, iyi biçimlendirilmemiş bir tek kök düğümü içermez. Tek bir kök düğümünü tanıtmak için hata yapmak zorunda kalmak, "sarmak" diyor. Bu sadece geçen hafta benim ilk hizmet yaptım, yöntem WebInvoke kendim de REST WCF için biraz yeniyim

1

atfetme verilerine

iki adet etrafında sarıcı eleman Bodystyle = WebMessageBodyStyle.Wrapped ekle bekliyoruz yapar. Ama bende benzer sorunlar vardı. This article beni doğru yönde başlattı. Sarıcı benim sorunumdu.

İlgili konular