কেন FromBody
এবংFromUri
বৈশিষ্ট্যাবলী ASP.NET ওয়েব API` প্রয়োজন?
বৈশিষ্ট্যগুলি ব্যবহার করা এবং সেগুলি ব্যবহার না করার মধ্যে কী পার্থক্য রয়েছে?
কেন FromBody
এবংFromUri
বৈশিষ্ট্যাবলী ASP.NET ওয়েব API` প্রয়োজন?
বৈশিষ্ট্যগুলি ব্যবহার করা এবং সেগুলি ব্যবহার না করার মধ্যে কী পার্থক্য রয়েছে?
উত্তর:
ASP.NET ওয়েব এপিআই একটি নিয়ামক উপর একটি পদ্ধতি কল, তখন তা মান পরামিতি জন্য, একটি প্রক্রিয়া নামক সেট করতে হবে বাঁধাই প্যারামিটার ।
ডিফল্টরূপে, ওয়েব এপিআই প্যারামিটারগুলি আবদ্ধ করতে নিম্নলিখিত বিধিগুলি ব্যবহার করে:
যদি প্যারামিটারটি একটি "সাধারণ" প্রকারের হয় তবে ওয়েব এপিআই ইউআরআই থেকে মানটি পাওয়ার চেষ্টা করে । সাধারণ ধরণের মধ্যে .NET আদিম প্রকারগুলি (ইনট, বুল, ডাবল এবং আরও এগিয়ে), এবং টাইমস্প্যান, ডেটটাইম, গাইড, দশমিক এবং স্ট্রিং অন্তর্ভুক্ত থাকে এবং কোনও ধরণের রূপান্তরকারী স্ট্রিং থেকে রূপান্তর করতে পারে এমন কোনও ধরণের থাকে।
জটিল ধরণের জন্য , ওয়েব এপিআই একটি মিডিয়া-টাইপ ফর্ম্যাটর ব্যবহার করে বার্তাটির প্রধান অংশ থেকে মানটি পড়ার চেষ্টা করে।
সুতরাং, আপনি যদি উপরের ডিফল্ট আচরণটি ওভাররাইড করতে চান এবং ওয়েব এপিআইকে ইউআরআই থেকে কোনও জটিল ধরণের পড়তে বাধ্য [FromUri]
করেন তবে প্যারামিটারে বৈশিষ্ট্য যুক্ত করুন । অনুরোধ সংস্থা থেকে ওয়েব এপিআইকে একটি সাধারণ প্রকারটি পড়তে বাধ্য [FromBody]
করতে, প্যারামিটারে অ্যাট্রিবিউট যুক্ত করুন ।
সুতরাং, আপনার প্রশ্নের উত্তর দেওয়ার জন্য, ওয়েব এপিআই-তে [FromBody]
এবং [FromUri]
বৈশিষ্ট্যের প্রয়োজনটি কেবল উপরে বর্ণিত ডিফল্ট আচরণের প্রয়োজন অনুসারে ওভাররাইড করা। নোট করুন যে আপনি নিয়ামক পদ্ধতির জন্য উভয় অ্যাট্রিবিউট ব্যবহার করতে পারেন, তবে কেবল এখানে ভিন্ন ভিন্ন পরামিতিগুলির জন্য, এখানে প্রদর্শিত হয়েছে ।
নেই অনেক বেশি তথ্য ওয়েবে যদি আপনি Google "ওয়েব এপিআই বাঁধাই পরামিতি"।
JustGetIt
যা মত একাধিক গুণাবলীকে যোগ করার একই উদ্দেশ্য করে তোলে [FromBody, FromQuery]
ইত্যাদি
ডিফল্ট আচরণটি হ'ল:
প্যারামিটারটি হলে আদিম প্রকার ( int
, bool
, double
, ...), ওয়েব এপিআই চেষ্টা থেকে মান পেতে কোনো URI HTTP অনুরোধ করুন।
জন্য জটিল ধরনের (আপনার নিজের বস্তু, উদাহরণস্বরূপ: Person
), ওয়েব এপিআই চেষ্টা থেকে মান পড়তে শরীর HTTP অনুরোধ করুন।
সুতরাং, যদি আপনি:
... তাহলে আপনাকে কোনও বৈশিষ্ট্য যুক্ত করতে হবে না ( [FromBody]
নাও [FromUri]
)।
কিন্তু, যদি আপনি একটি আছে আদিম টাইপ মধ্যে শরীর , তাহলে আপনি যোগ আছে[FromBody]
আপনার WebAPI নিয়ামক পদ্ধতি আপনার আদিম টাইপ প্যারামিটার সামনে। (কারণ, ডিফল্টরূপে, ওয়েবএপিআই এইচটিটিপি অনুরোধের ইউআরআইতে আদিম ধরণের সন্ধান করছে))
অথবা, আপনার ইউআরআইতে যদি কোনও জটিল ধরণের থাকে তবে আপনাকে অবশ্যই যুক্ত করতে হবে[FromUri]
। (কারণ, ডিফল্টরূপে, ওয়েবএপিআই ডিফল্টরূপে HTTP অনুরোধের শরীরে জটিল ধরণের সন্ধান করছে is)
আদিম ধরণের:
public class UsersController : ApiController
{
// api/users
public HttpResponseMessage Post([FromBody]int id)
{
}
// api/users/id
public HttpResponseMessage Post(int id)
{
}
}
জটিল ধরণের:
public class UsersController : ApiController
{
// api/users
public HttpResponseMessage Post(User user)
{
}
// api/users/user
public HttpResponseMessage Post([FromUri]User user)
{
}
}
এটি আপনার HTTP অনুরোধে কেবলমাত্র একটি প্যারামিটার প্রেরণ না করা পর্যন্ত এটি কাজ করে । একাধিক পাঠানোর সময় আপনাকে একটি কাস্টম মডেল তৈরি করতে হবেযা আপনার সমস্ত পরামিতি এর মতো:
public class MyModel
{
public string MyProperty { get; set; }
public string MyProperty2 { get; set; }
}
[Route("search")]
[HttpPost]
public async Task<dynamic> Search([FromBody] MyModel model)
{
// model.MyProperty;
// model.MyProperty2;
}
মাইক্রোসফ্টের এএসপি.নেট ওয়েব এপিআই-তে পরামিতি বাইন্ডিংয়ের ডকুমেন্টেশন থেকে :
যখন কোনও প্যারামিটারে [ফ্রমবিডি] থাকে, ওয়েব এপিআই একটি ফর্ম্যাটর নির্বাচন করতে সামগ্রী-প্রকারের শিরোনাম ব্যবহার করে। এই উদাহরণে, সামগ্রীর ধরণটি হ'ল "অ্যাপ্লিকেশন / জসন" এবং অনুরোধের বডিটি একটি কাঁচা জেএসএন স্ট্রিং (কোনও জেএসএন বস্তু নয়)। সর্বাধিক একটি প্যারামিটার বার্তার মূল অংশ থেকে পড়ার অনুমতি দেওয়া হয়।
এই কাজ করা উচিত:
public HttpResponseMessage Post([FromBody] string name) { ... }
এটি কাজ করবে না:
// Caution: This won't work! public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
এই নিয়মের কারণ হ'ল অনুরোধের শরীরটি একটি নন-বাফার স্ট্রিমে সঞ্চিত থাকতে পারে যা কেবল একবারই পড়তে পারে।
উপরের উত্তরের সাথে কেবল যুক্ত করুন ..
[ফ্রিউরি] কোয়েরিস্ট্রিং থেকে প্যারামিটারগুলি পাস করার পরিবর্তে ইউরি পরামিতিগুলি থেকে জটিল ধরণের বাঁধতেও ব্যবহার করা যেতে পারে
প্রাক্তন জন্য ..
public class GeoPoint
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
[RoutePrefix("api/Values")]
public ValuesController : ApiController
{
[Route("{Latitude}/{Longitude}")]
public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}
যেমন বলা যেতে পারে:
http://localhost/api/values/47.678558/-122.130989
যখন কোনও প্যারামিটারে [ফ্রমবিডি] থাকে, ওয়েব এপিআই একটি ফর্ম্যাটর নির্বাচন করতে সামগ্রী-প্রকারের শিরোনাম ব্যবহার করে। এই উদাহরণে, সামগ্রীর ধরণটি হ'ল "অ্যাপ্লিকেশন / জসন" এবং অনুরোধের বডিটি একটি কাঁচা জেএসএন স্ট্রিং (কোনও জেএসএন বস্তু নয়)।
সর্বাধিক একটি প্যারামিটার বার্তার মূল অংশ থেকে পড়ার অনুমতি দেওয়া হয়। সুতরাং এটি কাজ করবে না:
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
এই নিয়মের কারণ হ'ল অনুরোধের শরীরটি একটি নন-বাফার স্ট্রিমে সঞ্চিত থাকতে পারে যা কেবল একবারই পড়তে পারে
আরও তথ্যের জন্য দয়া করে ওয়েবসাইটে যান: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api