跨域(Cross-Origin Resource Sharing,簡稱CORS)是一種Web標準,它允許不同源的伺服器之間進行資源共享。在Web開發中,跨域請求非常常見,如何正確實現跨域請求是每個Web開發人員需要掌握的技巧。本文將從多個方面介紹.NET Core中如何正確實現跨域請求。
一、配置文件中設置跨域選項
在.NET Core中,我們可以通過在配置文件中設置跨域選項來實現跨域請求。具體操作如下:
1.在appsettings.json文件中添加跨域選項,如下所示:
{
"AllowedHosts": "*",
"Cors": {
"AllowAll": {
"Origins": "*",
"Headers": "*"
}
}
}
其中,Origins指定了允許的跨域來源地址,Headers指定了允許的跨域請求頭。如果想要允許所有地址和所有請求頭,可以設置為”*”。
2.在Startup.cs文件中使用配置文件中的跨域選項,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCors("AllowAll");
// ...
}
其中,AddPolicy方法用於配置跨域策略,AllowAnyOrigin、AllowAnyHeader、AllowAnyMethod分別表示允許任何來源地址、任何請求頭、任何請求方法。UseCors方法用於啟用跨域策略。
二、在Action中設置跨域
在.NET Core中,我們也可以在Action中設置跨域請求。具體操作如下:
1.使用[EnableCors]特性標記Action,如下所示:
[ApiController]
[Route("[controller]")]
[EnableCors("AllowAll")]
public class WeatherForecastController : ControllerBase
{
// ...
}
其中,AllowAll為在Startup.cs文件中配置的跨域策略名稱。
2.在Action方法上使用[Cors]特性,如下所示:
[HttpGet]
[Cors("AllowAll")]
public IEnumerable<WeatherForecast> Get()
{
// ...
}
其中,AllowAll為在Startup.cs文件中配置的跨域策略名稱。
三、使用自定義的跨域中間件
除了在配置文件和Action中設置跨域請求之外,我們還可以使用自定義的跨域中間件。具體操作如下:
1.自定義跨域中間件,如下所示:
public class CorsMiddleware
{
private readonly RequestDelegate _next;
public CorsMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
context.Response.Headers.Add("Access-Control-Allow-Headers", "*");
context.Response.Headers.Add("Access-Control-Allow-Methods", "*");
if (context.Request.Method == "OPTIONS")
{
context.Response.StatusCode = 204;
return;
}
await _next(context);
}
}
其中,Access-Control-Allow-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods分別指定了允許的跨域來源地址、請求頭、請求方法。如果請求方法為OPTIONS,則直接返回204響應,表示接受預檢請求。
2.在Startup.cs文件中註冊跨域中間件,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<CorsMiddleware>();
// ...
}
其中,UseMiddleware方法用於註冊自定義的跨域中間件。
四、使用第三方跨域中間件
除了自定義跨域中間件之外,我們還可以使用第三方跨域中間件來實現跨域請求。常用的跨域中間件包括Microsoft.AspNetCore.Cors、Steeltoe.Management.Endpoint和IdentityServer4.AccessTokenValidation等。具體使用方法可以參考官方文檔。
至此,本文介紹了.NET Core中如何正確實現跨域請求的多種方法,包括配置文件中設置跨域選項、在Action中設置跨域、使用自定義的跨域中間件和使用第三方跨域中間件。希望能夠對Web開發人員有所幫助。
原創文章,作者:NYJGS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316930.html