मेरे पास Global.asax में डिफ़ॉल्ट रूट है:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
मैं एक विशिष्ट कार्य को लक्षित करने में सक्षम होना चाहता था, इसलिए मैंने एक और मार्ग बनाया:
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
इसलिए, मेरे नियंत्रक में, मेरे पास है:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
कॉल करने .../api/records/bycategoryid/5से मुझे जो चाहिए वो मिलेगा। हालाँकि, कॉलिंग .../api/records/1मुझे त्रुटि देगा
अनुरोध से मेल खाते कई कार्य पाए गए: ...
मैं समझता हूं कि ऐसा क्यों है - मार्ग केवल वही परिभाषित करते हैं जो URL मान्य होते हैं, लेकिन जब यह कार्य मिलान की बात आती है, तो दोनों Get(int id)और ByCategoryId(int id)मेल खाते हैं api/{controller}/{id}, जो कि रूपरेखा को भ्रमित करता है।
फिर से काम करने के लिए डिफ़ॉल्ट एपीआई मार्ग प्राप्त करने के लिए मुझे क्या करने की आवश्यकता है, और एक को साथ रखें {action}? मैंने RecordByCategoryIdControllerडिफ़ॉल्ट एपीआई मार्ग से मेल करने के लिए नामांकित एक अलग नियंत्रक बनाने का सोचा , जिसके लिए मैं अनुरोध करूंगा .../api/recordbycategoryid/5। हालांकि, मुझे लगता है कि एक "गंदा" (इस प्रकार असंतोषजनक) समाधान होना चाहिए। मैंने इस पर जवाब के लिए देखा है और {action}इस मुद्दे का उल्लेख करने के साथ मार्ग का उपयोग करने पर कोई ट्यूटोरियल नहीं है ।