ASP.Net Core Web API解决跨域问题

一、跨域问题的原由

跨域问题是由浏览器的同源策略引起的,是指协议、域名、端口有一个不一样,那么就形成了跨域。更详细的介绍可以参考jQuery jsonp跨域请求

二、跨域问题的解决

1、使用JSONP

JSONP是通过使用特殊的HTML标记来请求跨域资源的,适用于前端开发。可以参考jQuery jsonp跨域请求

2、后台模拟HTTP请求

将跨域问题转移到服务端处理,在服务端请求不同源的API接口。

复制代码
public class HomeController : Controller
{
    [HttpGet]
    public string GetCrossDomainData()
    {
        return InvokeApi("http://localhost:5000/api/crossdomain/getdata");
    }

    private static string InvokeApi(string url)
    {
        using (var httpClient = new HttpClient())
        {
            var message = new HttpRequestMessage()
            {
                Method = HttpMethod.Get,
                RequestUri = new Uri(url)
            };
            var result = httpClient.SendAsync(message).Result;
            var content = result.Content.ReadAsStringAsync().Result;
            return content;
        }
    }
}
复制代码

3、在服务器端指定允许跨域

(1) 在控制器API中允许跨域

复制代码
[HttpGet]
[Route("GetData")]
public IActionResult GetData()
{
    //允许跨域请求
    HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    
    return new JsonResult(new
    {
        Id = "100",
        Data = "CrossDomainData"
    });
}
复制代码

(2) 使用IActionFilter标记允许跨域

可以在API方法或者控制器中使用IActionFilter标记,前者仅对当前方法生效,后者对整个控制器的方法都生效。

复制代码
public class CrossDomainActionFilterAttribute : Attribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        //允许跨域请求
        context.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
    }
}
复制代码
复制代码
[HttpGet]
[Route("GetData")]
[CrossDomainActionFilterAttribute]
public IActionResult GetData()
{
    //允许跨域请求
    //HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    
    return new JsonResult(new
    {
        Id = "100",
        Data = "CrossDomainData"
    });
}
复制代码
[Route("api/[controller]")]
[ApiController]
[CrossDomainActionFilter]
public class CrossDomainController : ControllerBase
{
}

4、使用CORS中间件

CORS中间件是微软提供的跨域支持类库,可使用Nuget引入Microsoft.AspNetCore.Cors类库。

(1) 注册跨域请求服务

//注册跨域请求CORS服务
services.AddCors(options =>
{
    options.AddPolicy("AllowCors", builder =>
    {
        builder.AllowAnyOrigin().AllowAnyMethod();
    });
});

(2) 启用Cors中间件

//启用Cors中间件
app.UseCors("AllowCors");

 

posted @   xhubobo  阅读(2099)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示