Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

จะแก้ไขปัญหา CORS ใน C # ASP.NET WebAPI ได้อย่างไร


การแบ่งปันทรัพยากรแบบข้ามต้นทาง (CORS) เป็นกลไกที่ใช้ส่วนหัว HTTP เพิ่มเติมเพื่อบอกเบราว์เซอร์เพื่อให้เว็บแอปพลิเคชันทำงานที่ต้นทางเดียว เข้าถึงทรัพยากรที่เลือกจากต้นทางอื่น เว็บแอปพลิเคชันดำเนินการคำขอ HTTP ข้ามต้นทางเมื่อร้องขอทรัพยากรที่มีแหล่งกำเนิดที่แตกต่างกัน (โดเมน โปรโตคอล หรือพอร์ต) จากตัวมันเอง

ตัวอย่างเช่น ให้เราพิจารณาแอปพลิเคชันที่มีส่วนหน้า (UI) และส่วนหลัง (บริการ) สมมติว่า front-end ให้บริการจาก https://demodomain-ui.com และแบ็กเอนด์ให้บริการจาก https://demodomain-service.com/api หากผู้ใช้พยายามเข้าถึงแอปพลิเคชัน ด้วยเหตุผลด้านความปลอดภัย เบราว์เซอร์จะจำกัดคำขอ HTTP ข้ามต้นทางที่เริ่มต้นจาก UI

ในการเอาชนะสิ่งนี้ จำเป็นต้องมีมาตรฐาน CORS เนื่องจากช่วยให้เซิร์ฟเวอร์ระบุได้ไม่เพียงแค่ว่าใครสามารถเข้าถึงสินทรัพย์ของตนได้ แต่ยังรวมถึงวิธีที่สินทรัพย์สามารถเข้าถึงได้ด้วย คำขอข้ามต้นทางถูกสร้างขึ้นโดยใช้วิธีการขอ HTTP มาตรฐาน เซิร์ฟเวอร์ส่วนใหญ่จะอนุญาตคำขอ GET ซึ่งหมายความว่าพวกเขาจะอนุญาตให้แหล่งข้อมูลจากภายนอก (เช่นหน้าเว็บ) อ่านเนื้อหาของพวกเขา วิธีการร้องขอ HTTP เช่น PATCH, PUT หรือ DELETE ต่อไปนี้เป็นส่วนหัว HTTP ที่เพิ่มโดย CORSstandard -

  • Access-Control-Allow-Origin

  • Access-Control-Allow-Credentials

  • Access-Control-Allow-Headers

  • Access-Control-Allow-Methods

  • Access-Control-Expose-Headers

  • การเข้าถึง-การควบคุม-อายุสูงสุด

  • การเข้าถึง-การควบคุม-คำขอ-ส่วนหัว

  • การเข้าถึง-การควบคุม-คำขอ-วิธีการ

  • ที่มา

เปิดใช้งาน CORS ในระดับโลก

อย่างแรกคือการติดตั้ง Microsoft.AspNet.WebApi.Cors จากตัวจัดการแพ็คเกจ Nuget

จากนั้นเปิดไฟล์ App_Start/WebApiConfig.cs เพิ่มรหัสต่อไปนี้ในวิธี WebApiConfig.Register -

จะแก้ไขปัญหา CORS ใน C # ASP.NET WebAPI ได้อย่างไร

เปิดใช้งาน CORS ที่ระดับตัวควบคุมและการดำเนินการ

นอกจากนี้เรายังสามารถเปิดใช้งาน CORS ที่ระดับตัวควบคุมหรือวิธีการดำเนินการดังด้านล่าง

ตัวอย่าง

using System.Web.Http;
using System.Web.Http.Cors;
namespace DemoWebApplication.Controllers{
   [EnableCors("*", "*", "*")] //Controller level
   public class DemoController : ApiController{
      [EnableCors("*", "*", "*")] //Action level
      public IHttpActionResult Get(int id){
         return Ok();
      }
   }
}

ในทำนองเดียวกัน เราสามารถปิดการใช้งาน cors โดยใช้แอตทริบิวต์ [DisableCors]