در این پست از وبسایت پرووید در رابطه با بررسی Attribute های [FromUri] و [FromBody] در ASP.NET Web API #2 صحبت خواهیم کرد.

بررسی Attribute های [FromUri] و [FromBody] در ASP.NET Web API #2

همانطور که دیدید به صورت پیش‌فرض Web API مقادیر مربوط به پارامترهای Primitive Type را از Query String و مقادیر پارامترهای Complex Type را از Request Body به دست خواهد آورد. اما اگر بخواهیم این رفتار پیش فرض را تغییر دهیم چه؟

آموزش ساخت Web API در ASP.NET Core 2.0

از شما دعوت می کنیم از بسته ی آموزش ساخت Web API در ASP.NET Core 2.0 دیدن کنید.

با استفاده از Attribute ای به نام [FromUri] می توانید از Web API بخواهید که مقدار یک پارامتر Complex Type را از Query String بخواند و با استفاده از Attribute ای به نام [FromBody] می توانید از Web API بخواهید که مقدار یک پارامتر Primitive Type را از Request Body بخواند. در واقع این دو Attribute می‌توانند رفتار پیش فرض Web API را معکوس کند.

برای بهتر فهمیدن این دو Attribute نگاهی به Action Method ای که در قسمت پایین تعریف شده است بیندازید.

public class StudentController : ApiController
{
    public Student Get([FromUri] Student stud)
    {

    }
}

در مثال بالا یک Action Method با نام POST تعریف شده است و پارامتر ورودی آن با [FromUri] تزئین یا اصطلاحا Decorate شده است.

دقت کنید که پارامتر ورودی یک Complex Type است و از نوع Type ای به نام Student می باشد. به صورت پیش‌فرض Web API باید مقدار این پارامتر ورودی را از Request Body بخواند اما با استفاده از [FromUri] ما از Web API می‌خواهیم که مقدار این پارامتر ورودی را از Query String بخواند. بنابراین اگر HTTP Request شما شبیه به http://localhost:xxxx/api/student?id=1&name=steve باشد.

بسته ی آموزش اصول برنامه نویسی در ASP.NET Core

از شما دعوت می کنیم از بسته ی آموزش اصول برنامه نویسی در ASP.NET Core دیدن کنید.

سپس Web API یک Object جدید از کلاس Student را ساخته و Property های id و name آن را با مقادیری که در Query String است تنظیم خواهد کرد.

نکته بسیار مهم

نکته بسیار مهم اینکه نام Property های یک پارامتر از نوع Complex Type باید با نام Property های درون Query String دقیقاً مطابقت داشته باشد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *