2015-06-24 8 views
8

क्या एएसपी.NET वेब एपीआई के रूटिंग तंत्र को एपीआई को सभी अनुरोधों को एक नियंत्रक विधि में रूट करने के लिए अनुकूलित करना संभव है?रूट करने के लिए सभी वेब एपीआई अनुरोध एक नियंत्रक विधि

एक अनुरोध में करने के लिए

www.mysite.com/api/products/ 

या

www.mysite.com/api/otherResource/7 

मेरे सभी SuperDuperController के प्राप्त करें() विधि के लिए रूट किया जाएगा आता है?

+0

आपको रुचि हो सकती है http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action- चयन –

उत्तर

1

मुझे नहीं पता कि आप ऐसा क्यों करना चाहते हैं और मैं निश्चित रूप से एक नियंत्रक के माध्यम से सबकुछ रूट करने की अनुशंसा नहीं करता, हालांकि आप इसे निम्नानुसार प्राप्त कर सकते हैं। मान लें कि आप ही कभी अपने कॉल में एक वैकल्पिक आईडी के साथ एक संसाधन के लिए जा रहे हैं, अपने WebApiConfig से जोड़ें:

public class SuperDuperController : ApiController 
{ 
    public IHttpActionResult Get(string resource, int? id = null) 
    { 
     return Ok(); 
    } 
} 

आप की आवश्यकता होगी: इस प्रकार

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{resource}/{id}", 
      defaults: new { controller = "SuperDuper", id = RouteParameter.Optional } 
     ); 
    } 
} 

फिर अपने नियंत्रक विधि को परिभाषित प्रत्येक अलग-अलग प्रकार के संसाधन के लिए वापस आने के लिए उचित IHttpActionResult पर निर्णय लें।

वैकल्पिक रूप से गुण रूटिंग का उपयोग कर, यह सुनिश्चित करें कि config.MapHttpAttributeRoutes() अपने WebApiConfig में मौजूद है और अपने नियंत्रक विधि के लिए निम्न विशेषताओं को जोड़ने:

[RoutePrefix("api")] 
public class SuperDuperController : ApiController 
{ 
    [Route("{resource}/{id?}")] 
    public IHttpActionResult Get(string resource, int? id = null) 
    { 
     return Ok(); 
    } 
} 
5

मैं एक मामले में जहां मैं यह करने के लिए आवश्यक में फंस गयी। (वेब एपीआई 2)

मैंने पहली बार कस्टम IHttpControllerSelector और IHttpActionSelector एस बनाने में देखा। हालांकि, यह चारों ओर एक अस्पष्ट रास्ता था। तो मैं अंत में इस मृत सरल कार्यान्वयन पर बस गया। आपको बस एक वाइल्डकार्ड मार्ग स्थापित करना है। उदाहरण:

public class SuperDuperController : ApiController 
{ 
    [Route("api/{*url}")] 
    public HttpResponseMessage Get() 
    { 
     // url information 
     Request.RequestUri 
     // route values, including "url" 
     Request.GetRouteData().Values 
    } 
} 

कोई भी अनुरोध अनुरोध जो "एपीआई /" से शुरू होता है, उपरोक्त विधि में भेजा जाएगा। इसमें आपके प्रश्न में उपर्युक्त यूआरएल शामिल हैं। आपको अनुरोध या संदर्भ ऑब्जेक्ट्स से जानकारी खोदनी होगी क्योंकि यह स्वचालित मार्ग मूल्य और मॉडल पार्सिंग को रोकता है।

इस बारे में अच्छी बात यह है कि आप अभी भी अन्य नियंत्रकों का उपयोग कर सकते हैं (जब तक उनके मार्ग "एपीआई /" से शुरू नहीं होते हैं)।

संबंधित मुद्दे