यदि आपको आधार से विरासत में मिला है NegotitatedContentResult<T>
, जैसा कि उल्लेख किया गया है, और आपको अपना रूपांतरण करने की आवश्यकता नहीं है content
(जैसे कि आप बस एक स्ट्रिंग लौटना चाहते हैं), तो आपको ExecuteAsync
विधि को ओवरराइड करने की आवश्यकता नहीं है ।
आपको बस एक उपयुक्त प्रकार की परिभाषा और एक कंस्ट्रक्टर प्रदान करना होगा जो उस आधार को बताता है जिसे वापस करने के लिए HTTP स्थिति कोड है। बाकी सब सिर्फ काम करता है।
यहाँ दोनों के लिए उदाहरण हैं NotFound
और InternalServerError
:
public class NotFoundNegotiatedContentResult : NegotiatedContentResult<string>
{
public NotFoundNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.NotFound, content, controller) { }
}
public class InternalServerErrorNegotiatedContentResult : NegotiatedContentResult<string>
{
public InternalServerErrorNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.InternalServerError, content, controller) { }
}
और फिर आप इसके लिए एक से अधिक विस्तार विधियाँ बना सकते हैं ApiController
(या यदि आपके पास एक बेस क्लास में है):
public static NotFoundNegotiatedContentResult NotFound(this ApiController controller, string message)
{
return new NotFoundNegotiatedContentResult(message, controller);
}
public static InternalServerErrorNegotiatedContentResult InternalServerError(this ApiController controller, string message)
{
return new InternalServerErrorNegotiatedContentResult(message, controller);
}
और फिर वे बिल्ट-इन तरीकों की तरह ही काम करते हैं। आप या तो मौजूदा NotFound()
कॉल कर सकते हैं या आप अपने नए कस्टम को कॉल कर सकते हैं NotFound(myErrorMessage)
।
और निश्चित रूप से, आप कस्टम प्रकार परिभाषाओं में "हार्ड-कोडित" स्ट्रिंग प्रकारों से छुटकारा पा सकते हैं और यदि आप चाहते हैं तो इसे सामान्य छोड़ दें, लेकिन फिर आपको सामान के बारे में चिंता करनी पड़ सकती है ExecuteAsync
, जो आपके <T>
वास्तव में क्या है, इस पर निर्भर करता है।
आप अधिक देख सकते हैं स्रोत कोड के लिए NegotiatedContentResult<T>
सभी यह होता है देखने के लिए। इसमें बहुत कुछ नहीं है।