Как да активирате CORS на вашия уеб API

Ограниченията за сигурност на политиката за сигурност на вашия браузър не позволяват на вашия уеб браузър да отправя AJAX заявки към сървър в друг домейн. Това е известно и като политика от същия произход. С други думи, вградената защита на браузъра не позволява на уеб страница на един домейн да изпълнява AJAX повиквания на друг домейн.

Тук на помощ идва CORS (Cross-Origin Resource Sharing). CORS е стандарт W3C, който ви позволява да се отклоните от същата политика за произход, приета от браузърите, за да ограничите достъпа от един домейн до ресурси, принадлежащи на друг домейн. Можете да активирате CORS за вашия уеб API, като използвате съответния пакет на уеб API (в зависимост от използваната версия на уеб API) или междинния софтуер OWIN.

Обърнете внимание, че произходът на заявка се състои от схема, хост и номер на порт. Така че две заявки се считат за един и същ произход, ако имат една и съща схема, хост и номер на порт. Ако някое от тях се различава, заявките се считат за кръстосани, т.е. не принадлежащи към идентичен произход.

Активирайте поддръжката на CORS в ASP.NET Web API

ASP.NET уеб API предоставя отлична поддръжка за CORS. За да осигурите поддръжка за CORS в ASP.NET Web API 2, трябва да използвате пакета NuGet на Microsoft.AspNet.WebApi.Cors. За да инсталирате този пакет, можете да изпълните следната команда от конзолата на диспечера на пакети NuGet.

Инсталирайте пакета Microsoft.AspNet.WebApi.Cors

Като алтернатива можете да изберете проекта си в прозореца на Solution Explorer и да инсталирате пакета чрез мениджъра на пакети NuGet.

Ако използвате Web API 1.0, можете да активирате поддръжката на CORS, включително следните изявления в манипулатора на събитие Application_BeginRequest на файла Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", allowedOrigin); 

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");

Имайте предвид, че “allowedOrigin” тук е низова променлива, която съдържа произхода на заявката, която иска да осъществи достъп до ресурса. 

Поддръжката за CORS може да бъде активирана на три нива. Те включват следното:

  • Ниво на действие
  • Ниво на контролера
  • Глобално ниво

Активирайте CORS на глобално ниво

За да активирате CORS на глобално ниво, ще трябва да се възползвате от метода EnableCors на класа HttpConfiguration, както е показано в кодовия фрагмент, даден по-долу.

публичен статичен регистър за невалидни (HttpConfiguration config)

        {

            низ произход = "// localhost: 50164 / WebClient /";

            EnableCorsAttribute cors = нов EnableCorsAttribute (произход, "*", "GET, POST");

            config.EnableCors (cors);

            // Посочете тук конфигурацията и услугите на уеб API

            // Посочете тук маршрутите на уеб API          

        }

    }

Обърнете се към кодовия фрагмент, даден по-горе. Обърнете внимание как е посочен произходът на заявката. Параметърът * включва всички заглавки на заявките. Така че, GET и POST заявки от посочения домейн ще бъдат приети, всички останали заявки ще бъдат отхвърлени.

Активирайте CORS на ниво контролер

Можете също така да активирате поддръжката на CORS на ниво контролер. За да направите това, посочете атрибута [EnableCors] към вашия уеб API контролер, както е показано по-долу.

  [EnableCors (произход: "// localhost: 50164 /", заглавки: "*", методи: "*")]

    публичен клас AuthorsController: ApiController

    {  

        // Напишете тук методите на вашия контролер за уеб API

    }

Активирайте CORS на ниво действие

По същия начин можете да активирате CORS на ниво действие, като използвате атрибута [EnableCORS]. Ето пример, който илюстрира как се прави това.

публичен клас AuthorsController: ApiController

    {

        [EnableCors (произход: "// localhost: 50164 /", заглавки: "*", методи: "*")]

        публичен IEnumerable Get ()

        {

            връщане на нов низ [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Деактивирайте CORS за конкретно действие

Сега може да се наложи да деактивирате CORS за конкретно действие или група действия. Тази функция може да е полезна, когато вече сте активирали CORS на глобално ниво и сега искате да го деактивирате за едно от повече действия поради съображения за сигурност. Следният кодов фрагмент илюстрира как можете да постигнете това, като използвате атрибута [DisableCors].

[DisableCors ()]

публичен IEnumerable Get ()

   {

      връщане на нов низ [] {"Joydip Kanjilal", "Steve Smith"};

   }

Ако използвате ASP.NET Core, трябва да добавите пакета Microsoft.AspNetCore.Cors чрез NuGet към вашия проект и след това да напишете следното изявление във файла Startup.cs, за да настроите поддръжката на CORS.

публична невалидна ConfigureServices (услуги на IServiceCollection)

{

    услуги.AddCors ();

}

Можете да активирате CORS с помощта на CORS междинния софтуер - можете да се възползвате от метода за разширение UseCors в това отношение. Като алтернатива можете да активирате CORS на контролера или на нивата на действие, като използвате атрибута EnableCors по същия начин, както направихме по-рано в тази статия. По същия начин за деактивиране на CORS можете да използвате атрибута [DisableCors].