কীভাবে এএসপি.নেট ওয়েব এপিআই url তৈরি করবেন?


উত্তর:


139

ApiController একটি সম্পত্তি বলা ইউআরএল টাইপ যা System.Web.Http.Routing.UrlHelper আপনি API কন্ট্রোলার জন্য URL গুলি গঠন করতে পারবেন।

উদাহরণ:

public class ValuesController : ApiController
{
    // GET /api/values
    public IEnumerable<string> Get()
    {
        // returns /api/values/123
        string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
        return new string[] { "value1", "value2" };
    }

    // GET /api/values/5
    public string Get(int id)
    {
        return "value";
    }

    ...
}

এই urlHelper আপনার দৃষ্টিভঙ্গি বা মানক নিয়ামকদের মধ্যে নেই exist


হালনাগাদ:

এবং কোনও এপিআইকন্ট্রোলারের বাইরে রাউটিং করার জন্য আপনি নিম্নলিখিতটি করতে পারেন:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string url = Url.RouteUrl(
            "DefaultApi", 
            new { httproute = "", controller = "values", id = "123" }
        );
        return View();
    }
}

বা একটি দৃশ্যের ভিতরে:

<script type="text/javascript">
    var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
    $.ajax({
       url: url,
       type: 'GET',
       success: function(result) {
           // ...
       }
    });
</script>

httproute = ""গুরুত্বপূর্ণ রুট টোকেন লক্ষ্য করুন ।

স্পষ্টতই এটি ধরে নিয়েছে যে আপনার এপিআই রুটটি DefaultApiআপনার রেজিস্টাররুটে পদ্ধতিতে এখানে কল করা হয়েছে Global.asax:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

নিরাপদ উপায়ে urls উত্পন্ন করতে আমার দৃশ্যের প্রয়োজনের কারণে এটি .. সত্যিই আমাকে খুব বেশি সহায়তা করে না। যদি কোনও গো লাইভ লাইসেন্স থাকে তবে ভিউতে ইউআরএল তৈরি করার 'গো লাইভ' উপায় কী?
শেন কোর্ট্রিল

আরও গুরুত্বপূর্ণ বিষয় আপনি যদি এএসপি. নেট ডেভেলপমেন্ট সার্ভার ব্যবহার করেন তবে এটি কাজ করবে না কারণ এটি সমস্ত সময় পোর্ট পরিবর্তন করে যাতে আপনি ভিউটিতে থাকা ইউআরএলটিকেও কঠোর করতে পারবেন না।
শেন কোর্ট্রিল

@ শানেকোর্ট্রিল, আমি কীভাবে System.Web.Mvc.UrlHelperএইচটিটিপি কনট্রোলারকন্টেক্সটের বাইরের এপি রুট তৈরি করতে সাধারণ ব্যবহার করতে পারি তা বোঝাতে আমি আমার উত্তর আপডেট করেছি ।
দারিন দিমিত্রভ

অনেক ধন্যবাদ! আমি রুটআরল ব্যবহার করার চেষ্টা করছিলাম কিন্তু httproute পরমের প্রয়োজনীয়তা সম্পর্কে জানতাম না।
শেন কোর্ট্রিল

2
আমি নমুনার উদ্দেশ্য বুঝতে পেরেছি; আমি বলছি যদি আপনি ভিউব্যাগ কোডের এক লাইনে ফেলে দেন তবে এটি আরও কার্যকর নমুনা হবে কারণ আপনি প্রদর্শিত হবেন যে এই মানটি আমরা একটি সম্ভাবনাময় দৃশ্যে যাবার চেষ্টা করছিলাম এবং কেবল কিছু কিছু স্বেচ্ছাসেবক কোড চালাচ্ছি না। আবার, আমি শেষ পর্যন্ত কোডটির নির্দিষ্ট লাইনটি প্রাসঙ্গিক বলে স্বীকৃতি দেওয়ার আগে আমি কী মিস করেছি তা উপলব্ধি করতে কয়েক মিনিট ব্যর্থ না করলে আমি মন্তব্য করতাম না।
জন ডেভিস

43

এটি এর সরল রূপের সাথে কাজ করে Url.Actionসুতরাং আপনাকে কোনও রাউটিংয়ের নাম উল্লেখ করতে হবে না:

Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })

area = ""যদি কোনও অঞ্চলের মধ্যে URL এর প্রয়োজন হয় তবে আপনি একটি যুক্ত করতে চাইতে পারেন । (এপিআই কন্ট্রোলাররা ডিফল্টরূপে অঞ্চলের বাইরে থাকেন)) আমি এমভিসি 4 ব্যবহার করছি।


7
ওয়েব এপিআই মধ্যে UrlHelper হয় msdn.microsoft.com/en-us/library/... , এটি একটি কর্ম পদ্ধতি নেই।
ইউরি ফক্টোরিভিচ

8
@ ইউরিফ্যাক্টোরিভিচ এই পোস্টটি থেকে বোঝা যাচ্ছে যে Url.Actionএকটি ভিউ থেকে ব্যবহৃত হচ্ছে। Urlধরণের System.Web.Mvc.UrlHelper, এবং এটি WebApiরুটে মানচিত্র করে না । এই কেন আপনি অতিরিক্ত প্যারামিটার প্রয়োজন হয়: new { httproute = "" }
জেসি

3
আমি যোগ করেছি httproute""তবে এটি ম্যাপিং করছে না / /
মাসলো

আমাকে একটি ফাঁকা জায়গা এবং নাল এইচটিএমএল এ্যাট্রিবিউটের সাথে লিঙ্কটি যুক্ত করতে হয়েছিল @Html.ActionLink("link", "Get", "Servers", new { id = r.idServer, area = "", httproute = "" }, null) তবে এটি পুরোপুরি কার্যকর হয়েছিল
ক্রিস্টোফার জি লুইস

2
এটি একটি দর্শন থেকে পুরোপুরি কাজ করে, তবে, আমি নিশ্চিত নই কেন এটি ক্রিয়াকলাপের স্ট্রিং হিসাবে: / এপিআই / ড্যাশবোর্ড? ক্রিয়া = গেটডাটা হিসাবে নামটি উত্পন্ন করে। আমি এটি আশা করছিলাম: / এপিআই / ড্যাশবোর্ড / গেটডাটা
umutesen

7

হার্ডকডযুক্ত স্ট্রিং (নিয়ন্ত্রকের নাম) ছাড়াই টাইপসেফ পদ্ধতিতে লিঙ্কগুলি তৈরি করতে সক্ষম হতে চান?

তার জন্য একটি নুগেট আছে! (এবং এটি মার্ক সিম্যান লিখেছেন)

https://github.com/ploeh/Hyprlinkr

এর মতো কাজ করে:

রুটগুলি, যথারীতি:

name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }

একটি ইউআরএল পান:

var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));

ফলাফল:

http://localhost/api/foo/1337

3

প্রশ্নের উত্তর দেওয়ার জন্য এখানে কিআইএসএস পদ্ধতি রয়েছে:

আপনি যদি এমভিসি কন্ট্রোলার ইউআরএল তৈরি করতে এই কোডটি ব্যবহার করেন

@Url.Action("Edit", "MyController")

নিয়ামকটির API সংস্করণটির জন্য একটি URL পাওয়ার জন্য (আপনি একই নিয়ামকের নামটি ধরে নিচ্ছেন) ধরে নিতে পারেন

@Url.Action("Edit", "api/MyController")

সমস্ত ইউআরএল.অ্যাকশন পদ্ধতিটি যা করছে নিয়ন্ত্রকের নাম সহ অ্যাপ্লিকেশনটির মূল পাথ সংযোজন করা হয় তার পরে ক্রিয়া নামটি অনুসরণ করা হয় (যদি এটি "সূচক না হয় তবে এটি সংযুক্ত না হয়। যদি রুটের মান অবজেক্টের আইডি থাকে) সম্পত্তি মানটি ইউআরএল-এ যুক্ত হয়।


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