मेरे पास 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}
इस मुद्दे का उल्लेख करने के साथ मार्ग का उपयोग करने पर कोई ट्यूटोरियल नहीं है ।