.NET、.NET Core的跨域配置
程序员文章站
2022-03-09 21:39:09
...
刚开始学前后端分离的时候,自己琢磨跨域,弄了好几天,后来才发现原来这么简单。
.NET FrameWork下的跨域配置
在api项目中
1.在web.config文件中,找到system.webServer节点,添加httpProtocol节点
<system.webServer>
<!--添加httpprotocol节点-->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Credentials" value="true" />
<!--value可以为*,如果前端的ajax或者axios配置了withCredentials = true,就不能为*了-->
<add name="Access-Control-Allow-Origin" value="http://localhost:8080" />
<add name="Access-Control-Allow-Headers" value="AuthToken, Authorization, Origin, Content-Type,Accept, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET, PATCH, POST, PUT, DELETE, OPTIONS" />
<!--配置可跨域的方法,可为*,代表所有<add name="Access-Control-Allow-Methods" value="*" />-->
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<!--注释这一句-->
<!--<remove name="OPTIONSVerbHandler" />-->
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
</system.webServer>
注意事项:
(一) 当前端配置withCredentials=true时, 后端配置Access-Control-Allow-Origin不能为*, 必须是相应地址
(二) 当配置withCredentials=true时, 后端需配置Access-Control-Allow-Credentials为true
(三) 当前端配置请求头时, 后端需要配置Access-Control-Allow-Headers为对应的请求头集合
2.第二种
1.在web.config中添加配置项,找到configuration节点,添加以下
<appSettings>
<add key="cors:allowedMethods" value="*" />
<add key="cors:allowedOrigin" value="*" />
<add key="cors:allowedHeaders" value="*" />
</appSettings>
2.在App_Start文件下的WebApiConfig.cs类中的Register方法中添加以下代码即可
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
//跨域配置
var allowedMethods = ConfigurationManager.AppSettings["cors:allowedMethods"];
var allowedOrigin = ConfigurationManager.AppSettings["cors:allowedOrigin"];
var allowedHeaders = ConfigurationManager.AppSettings["cors:allowedHeaders"];
var cors = new EnableCorsAttribute(allowedOrigin, allowedHeaders, allowedMethods)
{
SupportsCredentials = true
};
config.EnableCors(cors);
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
}
}
.NET Core下的跨域配置
1.新建一个webapi项目
2.在Startup.cs类中的ConfigureServices方法中添加
//配置跨域处理,允许所有来源:
services.AddCors(options =>
{
options.AddPolicy("all", builder =>
{
builder.AllowAnyOrigin() //允许任何来源的主机访问
.AllowAnyMethod()
.AllowAnyHeader();
});
});
3.在Configure中添加
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
#region 跨域
app.UseCors("all");
#endregion
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
上一篇: Java String类
下一篇: 关于linux时间同步问题
推荐阅读
-
使用.Net Core + Vue + IdentityServer4 + Ocelot 实现一个简单的DEMO +源码
-
你所不知道的ASP.NET Core MVC/WebApi基础系列 (一)
-
ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
-
.Net core下直接执行SQL语句并生成DataTable的实现方法
-
ASP.NET Log4Net日志的配置及使用,文件写入
-
.Net Core库类项目跨项目读取配置文件的方法
-
ASP.NET Core 2.2中的Endpoint路由详解
-
在.NET Core中使用异步编程的方法步骤
-
详解.NET Core 3.0中的新变化
-
ASP.NET Core中自定义路由约束的实现