پیشنهادها
نظرات مطالب
ASP.NET MVC #1
ASP.NET Web API وابستگی به ASP.NET MVC ندارد و در برنامههای وب فرم هم قابل استفادهاست (یا حتی در یک سرویس ویندوز NT). در برنامههای ASP.NET MVC فعلی امکان استفادهی از امکانات آن در Viewهای برنامه وجود دارد. این جزئیات در مطالب «گروه ASP.NET Web API» بیشتر بررسی شدهاند.
از نحوهی تعریف فیلتر JwtAuthorizeAttribute مطلب « پیاده سازی JSON Web Token با ASP.NET Web API 2.x» و نحوهی ثبت آن و معرفی آن برای Web API ایده بگیرید. معرفی آن برای MVC هم در پروژهی همان مطلب « تزریق وابستگیها در فیلترهای ASP.NET MVC » بحث شدهاست (خصوصا نظرات آنرا هم مطالعه کنید).
پروژهها
OutputCache for ASP.NET Web API
برخلاف اکشنهای ASP.NET MVC که میتوانند با اتربیوت [OutputCache] دارای کش شوند، متدهای ASP.NET Web API را نمیتوان کش کرد.
فیلیپ ووگ در وبلاگش کد اتربیوتی نوشته است تا بتوان Web APIها را نیز کش کرد:
من این کد را توسعه داده ام به صورتی که ویژگیهایی مشابه کلاس OutputCacheAttribute پیدا کند.
ASP.NET Web API 2 بهمراه یک سری قابلیت جدید جالب منتشر شده است. در این پست 5 قابلیت برتر از این قابلیتهای جدید را بررسی میکنیم.
این رویکرد routing مزایای خود را دارد. از جلمه اینکه تمام مسیرها در یک مکان واحد تعریف میشوند، اما تنها برای الگوهایی مشخص. مثلا پشتیبانی از nested routing روی یک کنترلر مشکل میشود.
1. Attribute Routing
در کنار سیستم routing فعلی، ASP.NET Web API 2 حالا از Attribute Routing هم پشتیبانی میکند. در مورد سیستم routing فعلی، میتوانیم قالبهای متعددی برای routing بنویسیم. هنگامی که یک درخواست به سرور میرسد، کنترلر مناسب انتخاب شده و اکشن متد مناسب فراخوانی میشود.
در لیست زیر قالب پیش فرض routing در Web API را مشاهده میکنید.
Config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{Controller}/{id}", defaults: new { id = RouteParameter.Optional } );
در ASP.NET Web API 2 به سادگی میتوانیم الگوی URI ذکرد شده را پشتیبانی کنیم. لیست زیر نمونه ای از یک الگوی URI با AttributeRouting را نشان میدهد.
URI Pattern --> books/1/authors [Route("books/{bookId}/authors")] public IEnumerable<Author> GetAuthorByBook(int bookId) { ..... }
2. CORS - Cross Origin Resource Sharing
بصورت نرمال، مرورگرها اجازه درخواستهای cross-domain را نمیدهند، که بخاطر same-origin policy است. خوب، (CORS (Cross Origin Resource Sharing چیست؟
CORS یک مکانیزم است که به صفحات وب این را اجازه میدهد تا یک درخواست آژاکسی (Ajax Request) به دامنه ای دیگر ارسال کنند. دامنه ای به غیر از دامنه ای که صفحه وب را رندر کرده است. CORS با استانداردهای W3C سازگار است و حالا ASP.NET Web API در نسخه 2 خود از آن پشتیبانی میکند.
3. OWIN (Open Web Interface for .NET) self-hosting
ASP.NET Web API 2 بهمراه یک پکیج عرضه میشود، که Microsoft.AspNet.WebApi.OwinSelfHost نام دارد.
طبق گفته وب سایت http://owin.org :
OWIN یک اینترفیس استاندارد بین سرورهای دات نت و اپلیکیشنهای وب تعریف میکند. هدف این اینترفیس جداسازی (decoupling) سرور و اپلیکیشن است. تشویق به توسعه ماژولهای ساده برای توسعه اپلیکیشنهای وب دات نت. و بعنوان یک استاندارد باز (open standard) اکوسیستم نرم افزارهای متن باز را تحریک کند تا ابزار توسعه اپلیکیشنهای وب دات نت توسعه یابند.
بنابراین طبق گفتههای بالا، OWIN گزینه ای ایده آل برای میزبانی اپلیکیشنهای وب روی پروسس هایی به غیر از پروسس IIS است. پیاده سازیهای دیگری از OWIN نیز وجود دارند، مانند Giacomo، Kayak,Firefly و غیره. اما Katana گزینه توصیه شده برای سرورهای مایکروسافت و فریم ورکهای Web API است.
4. IHttpActionResult
در کنار دو روش موجود فعلی برای ساختن response اکشن متدها در کنترلر ها، ASP.NET Web API 2 حالا از مدل جدیدی هم پشتیبانی میکند.
IHttpResponseMessage یک اینترفیس است که بعنوان یک فاکتوری (factory) برای HttpResponseMessage کار میکند. این روش بسیار قدرتمند است بدلیل اینکه web api را گسترش میدهد. با استفاده از این رویکرد، میتوانیم response هایی با هر نوع دلخواه بسازیم.
برای اطلاعات بیشتر به how to serve HTML with IHTTPActionResult مراجعه کنید.
5. Web API OData
پروتکل (OData (Open Data Protocol در واقع یک پروتکل وب برای کوئری گرفتن و بروز رسانی دادهها است. ASP.NET Web API 2 پشتیبانی از expand, $select$ و value$ را اضافه کرده است. با استفاده از این امکانات، میتوانیم نحوه معرفی پاسخ سرور را کنترل کنیم، یعنی representation دریافتی از سرور را میتوانید سفارشی کنید.
- expand$: بصورت نرمال، هنگام کوئری گرفتن از یک کالکشن OData، پاسخ سرور موجودیتهای مرتبط (related entities) را شامل نمیشود. با استفاده از expand$ میتوانیم موجودیتهای مرتبط را بصورت inline در پاسخ سرور دریافت کنیم.
- select$: از این متد برای انتخاب چند خاصیت بخصوص از پاسخ سرور استفاده میشود، بجای آنکه تمام خاصیتها بارگذاری شوند.
- value$: با این متد مقدار خام (raw) فیلدها را بدست میآورید، بجای دریافت آنها در فرمت OData.
چند مقاله خوب دیگر
نظرات اشتراکها
دریافت کتاب Pro ASP.NET MVC 5 Platform
با عرض سلام و احترام
منظور از ASP.NET در اینجا دقیقا چی است ؟ و ارتباط مستقیم آن با ASP.NET MVC چیست ؟
به ASP.NET Web Forms که کاری نداریم، ولی اگر منظورتان از ASP.NET همان ASP.NET Handlers & Modules است و امکاناتی نظیر Global.asax و ...، می توان یک سایت ASP.NET MVC را به صورت کامل و بدون این امکانات بارگذاری کرد، حتی بدون استفاده از System.Web.dll ، سالهاست ASP.NET MVC دیگر وابستگی به ASP.NET ندارد، همانطور که ASP.NET Web API هیچ ربطی به ASP.NET MVC ندارد.
اشتراکها
کش HTTP با CacheCow در .NET Core
اشتراکها
چک لیست ایجاد یک ASP.NET Core API
مطلب فوق نه وابستگی خاصی به وب فرمها دارد و نه ASP.NET MVC. ویو آن یک فایل HTML سادهاست و سمت سرور آن فقط یک کنترلر ASP.NET Web API که با تمام مشتقات ASP.NET سازگار است. در این حالت یک نفر میتواند ASP.NET نگارش خودش را خلق کند؛ بدون اینکه نگران جزئیات وب فرمها باشد یا ASP.NET MVC. ضمنا دانش جاوا اسکریپتی آن هم قابل انتقال است؛ چون اساسا Kendo UI برای فناوری سمت سرور خاصی طراحی نشدهاست و حالت اصل آن با PHP، Java و امثال آن هم کار میکند.