2013-02-14 16 views
9

उदाहरण के लिए, यदि मेरे पास IReturn<T> के माध्यम से लिंक किए गए मानक अनुरोध और प्रतिक्रिया डीटीओ हैं, तो विभिन्न ऑनलाइन उदाहरणों (जैसे this one, हालांकि लगातार पूरे नहीं) में देखा गया है, जैसे सेवा विधि हस्ताक्षर करने के कारण क्या हैं:सर्विसस्टैक का नया एपीआई कुछ और दृढ़ता से टाइप किए गए बजाय "ऑब्जेक्ट" रिटर्न प्रकार को क्यों बढ़ावा देता है?

public object Get(DTO.MyRequest request) 

बजाय:

public IList<DTO.MyResponse> Get(DTO.MyRequest request) 

बस उत्पादन धारा के gzip संपीड़न, जो उत्पादन एक बाइट सरणी होने में परिणाम की तरह सेवा सुविधाओं का समर्थन करने के लिए यहाँ एक object वापसी प्रकार है? ऐसा लगता है कि कोई भी इन तथाकथित "एक्शन" कॉलों से उचित मजबूत रिटर्न प्रकार प्राप्त करना चाहता है, जब तक कि मुझे कुछ सामान्य परिदृश्य या केस का उपयोग न हो।

उत्तर

8

यह एक सीमा थी कि नई एपीआई ने केवल object रिटर्न प्रकार का समर्थन किया था, लेकिन ऐसा कुछ समय नहीं हुआ है जहां New API wiki page पर सभी उदाहरण अब मजबूत टाइप किए गए प्रतिक्रियाओं का उपयोग करते हैं।

कारणों जहां एक वस्तु वापसी प्रकार वापस जाने के लिए चाहते हो सकता है में से एक है अगर आप एक HttpResult अंदर प्रतिक्रिया, जैसे को सजाने के लिए चाहते हैं:

public object Post(Movie movie) 
    { 
     var isNew = movie.Id == null; 
     Db.Save(movie); //Inserts or Updates 

     var movie = new MovieResponse { 
      Movie = Db.Id<Movie>(newMovieId), 
     }; 
     if (!isNew) return movie; 

     //Decorate the response if it was created 
     return new HttpResult(movie) { 
      StatusCode = HttpStatusCode.Created, 
      Headers = { 
       { HttpHeaders.Location, Request.AbsoluteUri.CombineWith(movieId) } 
      } 
     }; 
    } 

यह भी उपयोगी है यदि आप अलग अलग लौटना चाहते प्रतिक्रियाओं अनुरोध के आधार पर, जैसे (हालांकि यह कुछ मैं सिफारिश नहीं है):

public object Get(FindMovies request) 
    { 
     if (request.Id != null) 
      return Db.Id<Movie>(movie.Id); 

     return Db.Select<Movie>(); 
    } 

आप एक object मैं अत्यधिक +०१२३४७३३३०६ साथ सजाने अपने अनुरोध डीटीओ की सिफारिश वापस जाने के लिए चुनते हैं, तोgive a hint to ServiceStack पर मार्कर सेवा की अपेक्षित प्रतिक्रिया क्या होनी चाहिए।

+1

धन्यवाद! उदाहरण में मैंने gzip संपीड़न का उद्धरण दिया है (उदाहरण के लिए, 'ToOptimizedResult ') के माध्यम से, क्या' ऑब्जेक्ट 'रिटर्न प्रकार की आवश्यकता होगी? आपने उल्लेख नहीं किया है कि 'ऑब्जेक्ट' की आवश्यकता वाले परिदृश्यों में से एक के रूप में, और मुझे लगता है कि 'ToOptimizedResult ' टी –

+3

की बजाय 'ऑब्जेक्ट 'देता है हाँ, यह आपके डीटीओ को' संपीड़ित रीसेट 'में सजा देता है। जब आप इसका इस्तेमाल करेंगे तो यह एक और अच्छा उदाहरण है। – mythz