जब वेब एपीआई में विशेषता मार्गों दर्ज की है आप कैसे विशेषता मार्गों पाए जाते हैं अनुकूलित करने के लिए एक कस्टम IDirectRouteProvider
रजिस्टर कर सकते हैं। उस कस्टम IDirectRouteProvider
में आप सभी "हार्ड" काम को डिफ़ॉल्ट कार्यान्वयन, DefaultDirectRouteProvider
पर प्रतिनिधि कर सकते हैं, जो विशेषता नियंत्रकों की सूची की गणना करने के लिए सभी नियंत्रकों और कार्यों को देखता है, और फिर उन सभी कड़ी मेहनत के लिए क्रेडिट लेता है।
यह सब सेट करने के लिए, पहले एक नया "नमूदार" सीधा रास्ता प्रदाता है कि प्रतिनिधियों को अपने सभी काम बनाने के लिए:
public class ObservableDirectRouteProvider : IDirectRouteProvider
{
public IReadOnlyList<RouteEntry> DirectRoutes { get; private set; }
public IReadOnlyList<RouteEntry> GetDirectRoutes(HttpControllerDescriptor controllerDescriptor, IReadOnlyList<HttpActionDescriptor> actionDescriptors, IInlineConstraintResolver constraintResolver)
{
var realDirectRouteProvider = new DefaultDirectRouteProvider();
var directRoutes = realDirectRouteProvider.GetDirectRoutes(controllerDescriptor, actionDescriptors, constraintResolver);
// Store the routes in a property so that they can be retrieved later
DirectRoutes = DirectRoutes?.Union(directRoutes).ToList() ?? directRoutes;
return directRoutes;
}
}
और फिर अपने ऐप के स्टार्टअप में WebApiConfig.Register
विधि से इस नए वर्ग का उपयोग करें:
public static class WebApiConfig
{
public static ObservableDirectRouteProvider GlobalObservableDirectRouteProvider = new ObservableDirectRouteProvider();
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes(GlobalObservableDirectRouteProvider);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ध्यान दें कि डेटा अंततः एक स्थिर क्षेत्र में संग्रहीत किया जाता है। यह आवश्यक है क्योंकि WebApiConfig.Register
के अंदर कोड तुरंत नहीं कहा जाता है - इसे बाद में global.asax.cs
में कहा जाता है। तो, सब कुछ के परिणामों का निरीक्षण करने, Application_Start
करने के लिए कुछ कोड जोड़ें:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var allDirectRoutes = WebApiConfig.GlobalObservableDirectRouteProvider.DirectRoutes;
// now do something with 'allDirectRoutes'
}
और एक छोटे से परीक्षण मैंने लिखा है, मैं ये मान मिला:
और वहाँ तुम्हारे पास है, ऐप में सभी विशेषता मार्गों की एक सूची!
नोट: यदि आप यह जानना चाहते हैं कि प्रत्येक विशेषता मार्ग कहां से आया है, तो DataTokens
प्रत्येक मार्ग की संपत्ति में अतिरिक्त डेटा squirrelled है।
स्पष्ट रूप से स्टैक ओवरफ्लो आपको पूर्ण आकार की छवियों को देखने नहीं देता है। तो यह यहां अपलोड किया गया है: http://imgur.com/DFlMqDa –