C# ASP.NET WebApi 跨域设置

概述

前后端分离开发模式,一定会遇到跨域的问题。这里收集了2种 C# Asp.Net webapi 相关的跨域解决方案,方便后续查找参考。

2021/10/28 更新: 有更加简单高效的方式推荐《C# ASP.NET MVC/WebApi 或者 ASP.NET CORE 最简单高效的跨域设置》

方案一:官方nuget扩展 Microsoft.AspNet.WebApi.Cors

第一步:搜索安装Microsoft官方扩展包:Microsoft.AspNet.WebApi.Cors

image

第二步:配置跨域条件
修改 App_Start/WebApiConfig.cs 添加跨域条件:

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
            // 添加跨域设置
            config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "XXX/{controller}/{action}/{id}",
                //routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

这里未对跨域做任何限制,如果追求更高的安全性,有很多高级的设置,可以参考文章:https://www.cnblogs.com/landeanfen/p/5177176.html

方案二:自定义判断请求头

针对一般处理程序(.ashx)可以通过判断请求头来处理跨域访问。
在ProcessRequest方法中判断请求头,并设置返回头文件:

//支持跨域访问.
string origin = context.Request.Headers["Origin"];
if (string.IsNullOrEmpty(origin) == false)
{
    context.Response.Headers["Access-Control-Allow-Origin"] = origin;
    // context.Response.Headers["Access-Control-Allow-Origin"] = "*";
    context.Response.Headers["Access-Control-Allow-Credentials"] = "true";
    context.Response.Headers["Access-Control-Allow-Headers"] = "x-requested-with,content-type";
}
posted @ 2021-07-16 15:17  鲜橙rqc  阅读(3865)  评论(0编辑  收藏  举报