আমাকে কি কেউ CreatedAtRoute () ব্যাখ্যা করতে পারে?


136

ওয়েব এপিআই 2 এর টেম্পলেট থেকে, একটি পোস্ট পদ্ধতি সর্বদা এর মতো:

[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
    ...
    return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}

আমি এই CreatedAtRoute()পদ্ধতি বুঝতে পারি না । কেউ CreatedAtRoute()আমাকে পদ্ধতিটি ব্যাখ্যা করতে পারেন ?


24
@ জনসন্ডার্স অবশ্যই আমি এই গুগলের ফলাফলগুলি পেয়েছি। আমার সমস্যা হ'ল এই নথিগুলি আমাকে এই পদ্ধতিটি বুঝতে সাহায্য করে না, সেগুলি পড়ার পরেও আমি এখনও বুঝতে পারি না। আমি এখানে জিজ্ঞাসা কেন।
সামরিক

11
আমি তখন আমার প্রশ্নের উত্তর দিতে চাই না।
মার্শাল

12
যদি আমি গুগল করতে পারি এবং উত্তর খুঁজে পেতে পারি তবে কেন আমি প্রশ্ন সম্পাদনা করতে এবং এখানে জিজ্ঞাসা করার জন্য সময় ব্যয় করতে বিরক্ত করব?
মার্শাল

3
এই প্রশ্ন জিজ্ঞাসা করার জন্য ধন্যবাদ :)
বিদার

উত্তর:


157

CreatedAtRouteপদ্ধতি নব নির্মিত সম্পদ কোনো URI আসতে যখন আপনি কিছু নতুন বস্তু সংরক্ষণ করতে একটি পোষ্ট পদ্ধতি ডাকা উদ্দীষ্ট। সুতরাং যদি আপনি উদাহরণস্বরূপ কোনও অর্ডার আইটেম পোস্ট করেন তবে আপনি 'এপিআই / অর্ডার / 11' এর মতো একটি রুট ফিরে আসতে পারেন (11 সম্ভবত অর্ডারটির আইডি হ'ল)।

বিটিডাব্লু আমি সম্মত হই যে এমএসডিএন নিবন্ধটি এটি বোঝার জন্য কোনও উপকারী নয়। আপনি যে পথে ফিরে আসবেন তা স্বাভাবিকভাবেই আপনার রাউটিং সেটআপের উপর নির্ভর করবে।


13
এটি কী ফিরিয়ে দেয় তা আসলে একটি CreatedAtRouteNegotiatedContentResult <myObject> অবজেক্ট! আপনি যদি নিজের ক্রিয়ায় একটি ইউনিট পরীক্ষা চালান তবে আপনি এটি দেখতে পাবেন। তবে HTTP প্রসঙ্গে চলাকালীন, এটি শরীরে ক্রমিকিত বস্তুটি ফিরিয়ে দেবে, তবে আপনার উত্সের লিঙ্কটির প্রতিক্রিয়াতে একটি শিরোনাম দেখতে হবে। বিটিডাব্লু আপনি যদি ভাবেন যে আমি প্রশ্নের উত্তর দিয়েছি, আপনি উত্তর হিসাবে চিহ্নিত করতে পারেন? চিয়ার্স।
জোচ্চোর দেখুন

3
আপনাকে ধন্যবাদ, এটি আমার প্রশ্নের উত্তর দেয়।
মার্শাল

2
আপনি সরবরাহ করেছেন এমন রুট প্রতিক্রিয়াতে অবস্থান শিরোনাম হিসাবে উপস্থিত হবে। এটি মোটামুটি আদর্শ REST আচরণ
জেফ মার্টিন

4
@ সিশার্পার যখন মাইবজেক্টটি কিন্তু ফিরে না আসে ... আমাকে কেন এটি ক্রিয়েটেডআউটরেটে পাস করতে হবে? পদ্ধতিটি এটি দিয়ে কী করছে?
এলিজাবেথ

6
বর্তমান রুটটি ব্যবহার করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, যদি আমি নিয়ন্ত্রণকারী ব্যবহার [Route("[controller]")]করে ফাইলগুলি নিয়ন্ত্রণকারী কোনও বস্তু তৈরি করি তবে আমি কী ফিরিয়ে দেব (উদাহরণস্বরূপ, সংলগ্ন জিইটি ক্রিয়াকলাপটি ইউআরএল সহ আহ্বান করা যেতে পারে)?
শিমি ওয়েটজ্যান্ডলার

17

আপনি যখন CreatedAtRoute ব্যবহার করেন, প্রথম যুক্তি হ'ল সংস্থান থেকে প্রাপ্ত হওয়ার পদ্ধতিটির নাম। যে কৌশলটি এতটা সুস্পষ্ট নয় তা হ'ল, এমনকি সঠিক পদ্ধতির নাম নির্দিষ্ট করেও, কাজ করার জন্য আপনাকে অবশ্যই HTTPGet বৈশিষ্ট্যে নেম পরম ব্যবহার করতে হবে।

সুতরাং আপনার পোস্টে রিটার্নটি যদি এটি হয়:

return CreatedAtRoute("Get", new { newModel.Id}, newModel);

তারপরে আপনার পদ্ধতির গেট নামকরণ করা হলেও আপনার পান পদ্ধতির বৈশিষ্ট্যটি দেখতে এমন হওয়া উচিত:

[HttpGet("{id}", Name = "Get")]

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


"এটি কেবল নতুন বস্তুটি (সাধারণত জেএসএন হিসাবে হিসাবে) ফিরিয়ে দেবে না, এটি ইউআরআইয়ের প্রতিক্রিয়াতে লোকেশন শিরোনাম সেট করবে যা এই সংস্থানটি পাবে" " "এটি" দ্বারা, আপনি কি এইচটিপিপেট বা এইচটিটিপিপোস্ট বোঝাতে চান? এছাড়াও, আপনি "ইউআরআইয়ের প্রতিক্রিয়াতে লোকেশন শিরোনামটি সেট করবে যা এই সংস্থানটি পাবে?" এর অর্থ কী?
ট্রান আনহ মিনহ

"এটি" এইচটিপিপোস্ট পদ্ধতিটি উল্লেখ করেছিল (উত্তরটি সম্পাদনা করুন)। অবস্থান শিরোনাম সম্পর্কিত আপনার প্রশ্নের হিসাবে, এটি একটি এইচটিটিপি শিরোনাম যা ক্লায়েন্টটি স্বয়ংক্রিয়ভাবে এটিকে পুনঃনির্দেশিত করে কিছু করার সিদ্ধান্ত নিতে পারে। এটি একটি স্ট্যান্ডার্ড এইচটিপি রেসপন্স শিরোনাম ( en.wikedia.org/wiki/… ))
স্কট ব্লসিংসাম

২ য় এবং ৩ য় পরমের অর্থও অন্তর্ভুক্ত করতে দয়া করে আপনার উত্তর আপডেট করতে পারেন।
পরিবর্তনশীল

0

। নেট কোর ওয়েবএপিআইতে, আপনি এই পদ্ধতিটি একটি 201 কোড ফেরত দিতে ব্যবহার করেন, যার অর্থ অবজেক্টটি তৈরি হয়েছিল।

[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute (string routeName, object routeValues, object content);

আপনি উপরে দেখতে পারেন, CreatedAtRoute 3 টি পরামিতি পেতে পারে:

রুটনাম সেই নামটি যা আপনাকে সেই পদ্ধতিতে রাখতে হবে যা ইউআরআই হবে যা তৈরি হওয়ার পরে সেই সংস্থানটি পাবে।

রুটভ্যালুগুলি হ'ল এই বস্তুটি এমন মান রয়েছে যা নামকরণের রুটে জিইটি পদ্ধতিতে পাঠানো হবে। এটি তৈরি করা বস্তুটি ফেরত দিতে ব্যবহৃত হবে

বিষয়বস্তু এটি তৈরি করা হয়েছে যে অবজেক্ট।

উপরের উদাহরণটি বন্ডেড নাম সহ একটি সাধারণ জিইটি পদ্ধতিতে একটি সাধারণ নিয়ামকের দুটি পদ্ধতির বাস্তবায়ন এবং একটি নতুন অবজেক্ট তৈরি করা POST পদ্ধতি দেখায়।

namespace BastterAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CompanyController : Controller
    {
        private ICompanyRepository _companyRepository;

        public CompanyController(ICompanyRepository companyRepository)
        {
            _companyRepository = companyRepository;
        }

        [HttpGet("{id}", Name="GetCompany")]
        public IActionResult GetById(int id)
        {
            Company company = _companyRepository.Find(id);

            if (company == null)
            {
                return NotFound();
            }

            return new ObjectResult(company);

        }

        [HttpPost]
        public IActionResult Create([FromBody] Company company)
        {

            if (company == null)
            {
                return BadRequest();
            }

            _companyRepository.Add(company);

            return CreatedAtRoute("GetCompany", new Company { CompanyID = company.CompanyID }, company);

        }


    }
}

গুরুত্বপূর্ণ

  1. লক্ষ্য করুন যে CreatedAtRoute (রুট নাম) এর প্রথম প্যারামিটারটি পান পদ্ধতিতে নামের সংজ্ঞা অনুসারে অবশ্যই একই হতে হবে।

  2. দ্বিতীয় প্যারামিটারের অবজেক্টটির প্রয়োজনীয় ক্ষেত্রগুলি থাকা দরকার যা আপনি গেট পদ্ধতিতে রিসোর্সটি পুনরুদ্ধার করতে ব্যবহার করেন, আপনি বলতে পারেন যে এটি তৈরি করা অবজেক্টের একটি উপসেট

  3. শেষ পরামিতিটি হ'ল সম্পূর্ণ ফর্মের বডি রিকোয়েস্টিতে প্রাপ্ত কোম্পানির অবজেক্ট।

FINALY

চূড়ান্ত ফলাফল হিসাবে, যখন কোনও নতুন সংস্থা তৈরি করার পোস্টটি এই এপিআইতে তৈরি হবে, আপনি আবার 'এপিআই / সংস্থা / {আইডি}' এর মতো একটি রুট ফিরিয়ে দেবেন যা আপনাকে নতুন নির্মিত সম্পদটি ফিরিয়ে দেবে

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