গ্লোবাল.এক্সএক্সে আমার ডিফল্ট রুট রয়েছে:
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
আমাকে ত্রুটি দেবে give
অনুরোধের সাথে মেলে এমন একাধিক ক্রিয়া পাওয়া গেছে: ...
আমি বুঝলাম, কেন যে - যাত্রাপথ মাত্র সংজ্ঞায়িত কি URL গুলি বৈধ, কিন্তু আপনার এটি ফাংশন ম্যাচিং, উভয় আসে Get(int id)
এবং ByCategoryId(int id)
ম্যাচ api/{controller}/{id}
, যা কি বিভ্রান্ত ফ্রেমওয়ার্ক।
ডিফল্ট এপিআই রুটটি আবার কাজ করার জন্য, এবং এটিতে রাখার জন্য আমাকে কী করতে হবে {action}
? আমি RecordByCategoryIdController
ডিফল্ট এপিআই রুটের সাথে মিল রেখে নামকরণের জন্য আলাদা একটি নিয়ামক তৈরি করার কথা ভেবেছিলাম , যার জন্য আমি অনুরোধ করব .../api/recordbycategoryid/5
। যাইহোক, আমি এটি একটি "নোংরা" (এইভাবে অসন্তুষ্টিজনক) সমাধান হতে পারি। আমি এর উত্তর খুঁজেছি এবং {action}
এই সমস্যার উল্লেখ সহ কোনও রুট ব্যবহার করার জন্য কোনও টিউটোরিয়াল নেই ।