ASP.NET MVC ব্যবহার করে একাধিক পরামিতিগুলি সহ রাউটিং


139

আমাদের সংস্থাটি আমাদের পণ্যগুলির জন্য একটি এপিআই বিকাশ করছে এবং আমরা এএসপি.নেট এমভিসি ব্যবহার করার বিষয়ে ভাবছি। আমাদের এপিআই ডিজাইন করার সময়, আমরা এক্সএমএল ফর্ম্যাটে ব্যবহারকারীর এপিআই থেকে তথ্যের জন্য অনুরোধ করার জন্য নীচের মত কলগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছি:

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&api_key=b25b959554ed76058ac220b7b2e0a026

আপনি দেখতে পাচ্ছেন, একাধিক পরামিতি পাস হয়েছে (যেমন artistএবং api_key)। ASP.NET MVC ইন, artistহবে controller, getImagesকর্ম, কিন্তু কিভাবে আমি কর্ম একাধিক প্যারামিটার পাস করবে?

উপরের ফর্ম্যাটটি ব্যবহার করে এটি কি সম্ভব?

উত্তর:


279

আপনার ক্রিয়া পদ্ধতিতে পরামিতিগুলি কেবল যুক্ত করে পরামিতিগুলি সরাসরি এমভিসিতে সমর্থিত। নিম্নলিখিত মত একটি ক্রিয়া দেওয়া:

public ActionResult GetImages(string artistName, string apiKey)

এমভিসি এই জাতীয় URL দেওয়ার সময় প্যারামিটারগুলিকে স্বয়ংক্রিয়ভাবে পপুলেটেড করবে:

/Artist/GetImages/?artistName=cher&apiKey=XXX

একটি অতিরিক্ত বিশেষ কেস হল "আইডি" নামক প্যারামিটার। আইডি নামের যে কোনও প্যারামিটারটিকে ক্যোরিস্ট্রিংয়ের পরিবর্তে পথে beোকানো যেতে পারে, তাই এরকম কিছু:

public ActionResult GetImages(string id, string apiKey)

নিম্নলিখিতগুলির মতো একটি URL দিয়ে সঠিকভাবে পপুলেশন করা হবে:

/Artist/GetImages/cher?apiKey=XXX

এছাড়াও, আপনার যদি আরও জটিল পরিস্থিতি থাকে তবে আপনি এমভিসি কোনও ক্রিয়াকলাপ সনাক্ত করতে ব্যবহার করে এমন রাউটিং বিধিগুলি কাস্টমাইজ করতে পারেন। আপনার Global.asax ফাইলটিতে রাউটিং বিধি রয়েছে যা কাস্টমাইজ করা যায়। ডিফল্টরূপে নিয়মটি এর মতো দেখাচ্ছে:

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

আপনি যদি একটি ইউআরএল সমর্থন করতে চান

/Artist/GetImages/cher/api-key

আপনি একটি রুট যুক্ত করতে পারেন:

routes.MapRoute(
            "ArtistImages",                                              // Route name
            "{controller}/{action}/{artistName}/{apikey}",                           // URL with parameters
            new { controller = "Home", action = "Index", artistName = "", apikey = "" }  // Parameter defaults
        );

এবং উপরের প্রথম উদাহরণের মতো একটি পদ্ধতি।


1
আমি। নেট 4 এবং এমভিসির সাথে কাজ করছি। আমি কেবল পথে একটি প্যারামিটার পাস করতে পারি। এই ইউআরএল {নিয়ামক} /} ক্রিয়া N / {আর্টনারনাম {/ {এপিকে} আমার জন্য 2 টি পরামিতিগুলিতে মানচিত্র করে না তবে কেবল একটি 404 ত্রুটি ট্রিগার করে। আমি যতদূর বলতে পারি পথের মধ্যে কেবলমাত্র 1 টি প্যারামিটার যেতে পারে। আমি কি ভুল করছি?
ডেভিডহ্যোগো

1
@ ডেভিড হায়োগো - আমি একই সমস্যাটি অনুভব করছিলাম। যে কোনও কারণেই হোক না কেন, আমি ডিফল্ট ক্রিয়াটি নির্দিষ্ট করে নিলেও, আমাকে কেবলমাত্র নিয়ামক এবং পরামিতি নয়, আমার এইচটিএমএল লিঙ্কে আমি যে ক্রিয়াটি চেয়েছিলাম তা করতে হয়েছিল।
Shaggy13spe

5
@ ডেভিড হায়গো: আমার একই সমস্যা ছিল এবং আবিষ্কার করেছি যে আপনার রুট টেম্পলেট প্যারামিটারগুলি অবশ্যই ক্রিয়া পদ্ধতির পরামিতি নামের সাথে অবশ্যই মেলে যেমন route নিয়ামক} / {ক্রিয়া} / {শিল্পী নাম} / {অ্যাপিকি action ক্রিয়া পদ্ধতির স্বাক্ষর থাকতে হবে সর্বজনীন অ্যাকশনসাল্ট মাইমেথোদ (স্ট্রিং আর্টিস্টনাম, স্ট্রিং এপিকি)
সুধাংশু মিশ্র

6
এছাড়াও, নিশ্চিত হয়ে নিন যে আপনার ইউআরএলটি আপনার কাস্টমটিতে পৌঁছানোর আগে ডিফল্ট রুটে ধরা পড়েছে না। আপনি কীভাবে তাদের সংজ্ঞা দিয়েছেন তার উপর ভিত্তি করে এটি প্রথম ম্যাচটি ব্যবহার করবে। আমার ক্ষেত্রে, আমি সূচকের ডিফল্টর জন্য "মাইকন্ট্রোলার /} বছর} / {মাস}" রুটটি ব্যবহার করার চেষ্টা করছিলাম, তবে রুটটি {নিয়ামক} / {ক্রিয়া} / {আইডি my আমার ইউআরএল (মাইকন্ট্রোলার / 2015) এর সাথে মিলেছে / 04), তাই আমি 404 পাচ্ছিলাম কারণ 2015 নামে কোনও পদক্ষেপের অস্তিত্ব নেই। আমার কাস্টম রুটটিকে শীর্ষে স্থানান্তরিত করা সমস্যার সমাধান করেছে।
স্যাম

রুটকনফিগের পরামিতিগুলির নামটি আমার অ্যাকশন স্বাক্ষরের সাথে মেলে না, সে কারণেই এটি কাজ করছে না, আমি @ ডটনেগগুয়ের বর্ণিত পদক্ষেপগুলি অনুসরণ করেছি এবং এটি কাজ করেছে
পেপিটম্ব

26

এমভিসি 5 দিয়ে শুরু করে আপনি ইউআরএল প্যারামিটার কনফিগারেশনগুলিকে আপনার নিয়ামকদের কাছে স্থানান্তর করতে অ্যাট্রিবিউট রাউটিং ব্যবহার করতে পারেন।

একটি বিশদ আলোচনা এখানে উপলভ্য: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx

সারসংক্ষেপ:

প্রথমে আপনি অ্যাট্রিবিউট রাউটিং সক্ষম করুন

 public class RouteConfig 
 {
     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapMvcAttributeRoutes();
     } 
 }

তারপরে আপনি প্যারামিটারগুলি এবং allyচ্ছিকভাবে ডেটা ধরণের সংজ্ঞা দিতে বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন

public class BooksController : Controller
{
    // eg: /books
    // eg: /books/1430210079
    [Route("books/{isbn?}")]
    public ActionResult View(string isbn)


21

আপনি ক্যোয়ারী স্ট্রিংয়ের মাধ্যমে স্বেচ্ছাচারিত প্যারামিটারগুলি পাস করতে পারেন তবে এটি একটি বিশ্রামের উপায়ে পরিচালনা করার জন্য আপনি কাস্টম রুটও সেট আপ করতে পারেন:

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&
                                  api_key=b25b959554ed76058ac220b7b2e0a026

এটি হতে পারে:

routes.MapRoute(
    "ArtistsImages",
    "{ws}/artists/{artist}/{action}/{*apikey}",
    new { ws = "2.0", controller="artists" artist = "", action="", apikey="" }
    );

সুতরাং যদি কেউ নিম্নলিখিত রুটটি ব্যবহার করে:

ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/

এটি আপনার উদাহরণ ক্যোরিস্ট্রিংয়ের একই স্থানে নিয়ে যাবে।

উপরেরটি কেবল একটি উদাহরণ, এবং লোকেরা ইউআরএল 'হ্যাক' করেন নি তা নিশ্চিত করার জন্য আপনাকে ব্যবসায়ের নিয়ম এবং সীমাবদ্ধতাগুলি প্রয়োগ করতে হবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.