DotNetZoom
3.06K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.me/+ufG25x7lVFgyYTNk
Download Telegram
#CORS, #CrossOrigin, #AspMvc, #WebApi
http://goo.gl/kqnK6l
بررسی مفهوم Cross-Origin Resource Sharing یا CORS

مثلا فرض کنید وب سرویسی نوشته اید که بر اساس Request (درخواست) وارده، اطلاعاتی را در پاسخ بر میگرداند.
حال در سایت خودتان(مثلا site1.com) از این وب سرویس استفاده میکنید و اشکالی هم ندارد. مشکل آنجاست که سایت رقیب (مثلا site2.com) نیز میتواند بدون اجازه وبسرویس شما را در سایت خود استفاده کند.

اینجاست که CORS به کمک ما می آید.
این یک قرارداد پذیرفته شده از طرف کنسرسیوم جهانی وب (W3C) می باشد که امکان استفاده از منابع سایتتان را فقط در مرز های دامین خودتان فراهم میکند. یعنی سایت های دیگر نمیتوانند منابع شما(ادرس های سایت شما- تصاویر و فایل های استاتیک و...) را در سایت خود استفاده کنند. زیرا دامین انها با دامین سایت شما متفاوت است.

در این حالت اگر درخواستی از طرف یک دامین دیگر به وبسرویس مان زده شود. وب سرویس کارش را به درستی انجام میدهد و Response (پاسخ مربوطه) را به مرورگر باز میگرداند. ولی مرورگر خطا می دهد و (Response - پاسخ برگشتی) را به شخص نشان نمیدهد.
پس این خطا صرفا در سمت مرورگر اتفاق میافتد و نه در سمت سرور ما (وب سرویس ما)

و اما چگونه جلوی درخواست های وارده از دامین های دیگر را بگیریم؟!
عملا سایت ما نمیفهمد که Request وارده از طرف دامین خودمان(site1.com) است یا دامین های دیگر، ولی میتواند مشخص کند که منابع من باید فقط در دامین خودم (site1.com) مورد استفاده قرار گیرد و نه در دامین های دیگر

چگونه؟
اگر Header یک Response (پاسخ برگشتی) از سمت سرور شامل مقدار زیر باشد
Access-Control-Allow-Origin: http://www.site1.com
یعنی این پاسخ فقط میتواند در دامین site1.com مورد استفاده قرار گیرد و در غیر این صورت یعنی از طرف دامین غیر مجازی درخواست شده. پس مرورگر جلوی آنرا خواهد گرفت و خروجی را نمایش نمیدهد.
ولی اگر header یک response شامل مقدار زیر باشد
Access-Control-Allow-Origin: *
یعنی این پاسخ در همه دامین ها مجاز بوده و میتواند نمایش داده شود (حتی اگر دامین شخص بنده نباشد)

و اما قوانین دیگری را نیز توسط CORS میتواند برای مرورگر ها مشخص کرد. از جمله:
چه نوع درخواست هایی مجاز است ؟ get یا post و یا ...
چه مقادیری در header درخواست مجاز است؟
و.... که لیست کامل به همراه اطلاعات بیشتر را میتوانید در آدرس زیر مشاهده کنید
https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

ا WebApi به صورت پیشفرض امکان استفاده از Api ها از طرف دامین های دیگر را نمیدهد و این موضوع میتواند بعضی مواقع برای خودمان نیز دردسر ساز شود.
و اما برای رفع این مشکل باید سرویس دهنده(وب سرویس) توی response ایی که به مرورگر میفرستد
مقداری را داخل header هایش قرار دهد که مشخص میکند " ای مرورگر گیر نده، اشکالی نداره از دامین های دیگه به من درخواست بزنن"
برای اعمال این موضوع در سطح یک Action یا همان Api میتوانیم کد زیر را در بدنه تابع بنویسیم.
Response.AppendHeader("Access-Control-Allow-Origin", "*");
و یا برای اعمال این موضوع در سطح Controller (که در نتیجه روی تمام اکشن های داخل آن نیز اعمال میشود) باید به صورت زیر عمل کنیم.
[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
public class TestController : ApiController
{
}
و یا برای اعمال در سطح کل سیستم (تمام Controller ها و Action ها) باید در کلاس Configuration داخل متد Register کد زیر را وارد کنیم.
public static void Register(HttpConfiguration config)
{
config.EnableCors();
}
و یا میتوانید در فایل Web.Config تگ های زیر را وارد کنید
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
</customHeaders>
</httpProtocol>
</system.webServer>


جهت اطلاعات بیشتر میتوانید به سایت enable-cors.org مراجعه کنید و یا مثال مختص Asp.Net آن را در آدرس زیر ببینید
http://enable-cors.org/server_aspnet.html
*مثال و آموزش رسمی سایت Asp.Net
http://goo.gl/E5y6pa
*این هم یک روش جالب دیگه که با استفاده از Action Filter ها انجام داده
http://goo.gl/qqXb0y
*اینم جالب کار کرده
http://goo.gl/QWbCT6

@IranAspMvc
Forwarded from طراحی و توسعه وب
http://www.dotnettips.info/post/2457/api-versioning

در این مقاله با روش‌های مختلف ورژن بندی API آشنا خواهید شد.
سه روش اصلی زیر را میتوان برای این منظور در نظر گرفت:
‌‏ URI-based versioning
‌‏ Header-based versioning
‌‏ Media type-based versioning

نویسنده: غلامرضا ربال

مخزن کدها: https://github.com/rabbal/ApiVersioningStrategies

#API #WebAPI
@Webly
#WebApi #AspNetMvc #Proxy #Javascript #CSharp

امروزه سادگی و راحتی استفاده از ASP. NET Web API برای ساخت سرویس های RESTful در بستر دات نت فریم ورک و نیز تطابق کامل آن با الگوها و اصول ASP .NET MVC، سبب محبوبیت و فراگیر شدن آن در بسیاری از پروژه های نرم افزاری شده است. همین امر کافی است تا کتابخانه و پروژه های سورس باز زیادی نیز برای سهولت استفاده از این وب سرویس، تولید و در دسترس قرار گیرند.

یکی از کتابخانه های خوب و مفید، کتابخانه ی ProxyApi است، که همانطور که از نام آن پیداست کار آن تولیدِ خودکارِ پراکسی هایِ جاوااسکریپتی برای اکشن های WebApi و نیز MVC است، تا درسمت کلاینت و در کدهای جاواسکریپت، بدون ذکر Url و داشتن اطلاعات اضافی از نوع متد(get، post و …) آن api را صدا زده و از امکانات آن استفاده نمود. این ویژگی به خصوص برای unit testing و سوویچ بین دیتاسورس های مختلف نیز مفید است:
https://github.com/stevegreatrex/ProxyApi
اطلاعات بیشتر:
https://goo.gl/QuUGry

از دیگر کتابخانه های خوب که علاوه بر پراکسی جاوااسکریپتی، پراکسی C# آن را نیز برای استفاده ی کلاینت ها فراهم میکند، کتابخانه ی WebApiProxy است، که دارای امکاناتی چون code snippet آماده برای سرعت در کدنویسی و نیز قابلیت intellisense برای مشاهده ی اطلاعات مورد نیاز از api مربوطه و ... می باشد:
https://github.com/RestCode/WebApiProxy

بسته های نیوگت هر دو کتابخانه نیز جهت نصب و استفاده ی آسان، موجود هستند.

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA