跨域懇求(Cross-Origin Resource Sharing,CORS)是現代Web開辟中罕見的成績,尤其是在利用ASP.NET Web API構建前後端分其余利用時。因為瀏覽器的同源戰略限制,跨域懇求平日會碰到各種困難。本文將揭秘ASP.NET Web API跨域懇求處理困難,並供給響應的處理打算。
跨域懇求困難
1. 同源戰略限制
同源戰略是瀏覽器為了進步保險性而履行的一種限制。它請求協定、域名跟埠號都必須雷同,不然瀏覽器將禁止跨域懇求。這招致以下成績:
- Cookie、LocalStorage跟IndexDB無法讀取:跨域懇求無法拜訪其他域的Cookie、LocalStorage跟IndexDB。
- DOM跟js東西無法獲取:跨域懇求無法拜訪其他域的DOM跟js東西。
- Ajax懇求無法發送:跨域Ajax懇求會被瀏覽器攔截。
2. Web.config設置成績
ASP.NET Web API默許不處理OPTIONS懇求,而OPTIONS懇求是CORS懇求中的預檢懇求。假如Web.config中不正確設置,會招致跨域懇求掉敗。
3. JSONP不支撐
ASP.NET Web API默許不支撐JSONP,而JSONP是處理跨域懇求的一種常用方法。
處理打算
1. 利用CORS旁邊件
在ASP.NET Core中,可能利用CORS旁邊件來處理跨域懇求。以下是一個簡單的示例:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
}
在Startup.cs文件中,利用以下代碼啟用CORS旁邊件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseCors("AllowAll");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
2. 自定義OPTIONS懇求處理
在ASP.NET Web API中,可能經由過程自定義OPTIONS懇求處理來處理跨域成績。以下是一個簡單的示例:
public class OptionsController : ApiController
{
[HttpGet]
public HttpResponseMessage Options()
{
var response = new HttpResponseMessage();
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Accept");
return response;
}
}
3. 利用JSONP
假如須要利用JSONP,可能經由過程自定義Action成果來支撐JSONP。以下是一個簡單的示例:
public IActionResult GetJsonp([FromQuery] string callback)
{
var data = new { Name = "張三", Age = 18 };
return Json(new { [callback] = JsonConvert.SerializeObject(data) });
}
總結
跨域懇求是ASP.NET Web API開辟中罕見的成績,但經由過程利用CORS旁邊件、自定義OPTIONS懇求處理跟JSONP等方法,可能有效地處理跨域懇求困難。盼望本文能幫助妳更好地懂得跟處理ASP.NET Web API跨域懇求成績。