امروزه با رشد اپلیکیشن های همرا و وب اپلیکیشن تک صفحه ای وب نوشتن وب سرویس کار مرسومی شده و روز به روز در حال روشد میباشد: کسی که سرور کار میکنه دیگه درگیر ui نمیشه چون ui وجود نداره و فقط خروجی json بازگشت خواهد داد: در صفحات عادی وقتی ادرس سایتی را وارد میکنید کل صفحه همراه با دادها اعم از عکس نوشته و. لود میشوند ولی در وب سرویس فقط یک رشته از جیسون داده ها برگشت داده میشود. : وابستگی به سیستم عامل یا پلتفرم خاصی ندارد تا اینجای کار با وب سرویس ها اشنا شدیم. با ذکر یک مثال مقاله را شروع میکنیم بر رویه وب سرویس زیر کلیک کنید اگر بدون هیچ مشکلی فراخوانی شده باشد خرجی ان به یک مقدار جیسونی به شکل زیر است این سبک خروجی ساده ترین حالت api response میباشد که داده به صورت جیسونی از شی برگشت داده میشود. مجددا وب سرویس بالا رو با کد فراخونی کنید این بار طبق داده ارسالی که مشاهده میکنیم باید خروجی NotFound نمایش داده شود ولی خروجی به شکل زیر است نوع خروجی های بالا بدون مشکل و درست میباشند ولی اجازه بدید با سایت های معروف دیگه مقایسه کنیم و تفاوت ان را ببینم سایت: وارد سایت لینکدین میشویم و با inspect گرفتن داده هایی که به صورت ajax فراخونی میشوند را مشاهده میکنیم همانطور که در شکل بالا مشاهده میکنید داده ها در یک قالب مشخص شده بازگشت داده شده است. همچنین میتوانید وارد این شوید و مجموعه ای از وب سرویس های استاندارد رو تست کنید به طور مثال رو لینک زیر کلیک کنید اگر به درستی فرخوانی کرده باشید خروجی به شکل زیر خواهد بود در این مقاله قصد داریم نحوه پیاده یک خروجی استاندارد از وب سرویس هامون داشته باشیم. یک پرژه dotnet web api ایجاد کنید همچنین یک کنترلر با CRUD ایجاد کنید. به کد زیر دقت کنید. کد بالا حالت پیشفرض میباشد اگر دقت کرده باشید با اینکه نوع خرجی اکشن میباشد ولی هنگام برگشت Product بدون هیچ خطایی پروژه اجرا میشود در ادامه بیشتر این موضوع را برسی خواهیم کرد به زبان سادتر میتوان گفت که نو Product نمیتونه به ActionResult تبدیل بشه و منطقا باید خطا کامپایلر نمایش داده شود. خیلی وقت بود که دنبال پیاده سازی همچین پترنی بودم اکثر سایت ها به صورت خلاصه بیان کردن ولی با ادرس یکی از بچه ها اشنا شدم و ایشون زحمت کشیدن به صورت کامل پیاده سازی رو انجام دادن. قبل از هر چیز وارد شوید و به صورت خلاصه مطالعه کنید. کاری که میخوایم انجام بدیم پیاده سازی یک قالب مدلی برای همه خروجی هامون است. به کد زیر دقت کنی. کد بالا یک struct تعریف کرده که یک نوع داده جنریکی از وردی میگرد همچنین داری چند پراپرتی وچند Static implicit operator است. دقت کنید در کدی که بالا برسی کردیم با وجود اینکه خروجی Action و مدل بازگشتی یکی نبود ولی باز خطایی گرفته دریافت نکردیم! چون عملیات Casting با implicit در پشت پرده هندل شده اند. برای شروع یک کلاس به نام ApiResult ایجاد کرده و به صورت زیر پیاده سازی کنید در بالا یک کلاس جنیرک برای نوع داده های مختلف و یک کلاس برای اینکه اگر فقط از نوع داده ApiResult استفاده کنیم ایجاد کردیم. به قطعه کدی که در قسمت بالا اورده شده است دقت کنید. کد بالا نمایانگر تبدیل خوتکار نوع داده ای OkResult به ApiResult میباشد. شما میتوانید هر نوع داده ای مختلف را به ApiResult تبدیل کنید برای مشاهده نمونه کامل کد را میتونید از مشاهده کنید. به کد زیر یک بار دیگر توجه کن با استفاده از ActionResult و implicit ها با اینکه نوع خرجی تابع از نوع Product است ولی بدون خطا عمل Casting انجام میشود. شما متوانید Response Type های خود دانت نت مثل NotFound یا BadRequst را با implicit ها پیاده سازی کنید. با این کار نوع خروجی خوانا و تمیزی خواهید داشت و کلاینت کارا با خوانایی و سرعت بیشتر میتوانند مدل های خود را bind کنند. اگه از مقاله راضی بودید میتونید از لینک زیر برام قهوه بخرید: )