ASP.net Core跨域配置
程序员文章站
2024-01-21 19:49:52
...
我们在使用API加视图前后端分离时,一般情况WebAPI都是跨域请求,没有设置跨域一般会报以下错误
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:48057' is therefore not allowed access.
那么接下来我们说一下ASP.net Core的两种跨域:全局和区域
全局跨域:
打开Startup.cs文件,在ConfigureServices方法中添加以下代码
> 1.配置跨域处理,允许所有来源:
//配置跨域处理,允许所有来源:
services.AddCors(options =>
options.AddPolicy("自定义的跨域策略名称",
p => p.AllowAnyOrigin())
);
> 2.允许一个或多个具体来源:
//允许一个或多个具体来源:
services.AddCors(options =>
{
// Policy 名稱 CorsPolicy 是自訂的,可以自己改
options.AddPolicy("跨域规则的名称", policy =>
{
// 設定允許跨域的來源,有多個的話可以用 `,` 隔開
policy.WithOrigins("http://localhost:3000","http://127.0.0.1")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
以上两种按需求选择一种即可。
接着就是在Configure方法(中间件)中添加一下代码:
app.UseCors("自定义的跨域策略名称");//必须位于UserMvc之前
app.UseMvc();
如果要全局配置跨域,要在中间件的路由配置中加上
.RequireCors(MyAllowSpecificOrigins)
示例:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireCors(MyAllowSpecificOrigins);
// 添加 signalR 服务
// endpoints.MapHub<MessageHubs>("/Message");
});
局部跨域第一种用法:
- ConfigureServices方法不变,删去Configure中的app.UseCors()方法
- .在Controller顶部或者Action方法顶部加上[EnableCors(“自定义的跨域策略名称”)]特性,例如
[EnableCors("自定义的跨域策略名称")]
[Route("api/[controller]")]
public class ContactController : Controller
以上就可实现指定某个Controller或者Action跨域
禁止跨域:
禁止跨域在Controller或者Action加上[DisableCors]特性即可禁止跨域
[HttpGet("{id}")]
[DisableCors]
public string Get(int id)
{
return "value";
}
上一篇: asp.net Core 跨域配置
下一篇: php excel转pdf