如何在 asp.net 自托管 API 中启用 CORS?
Posted
技术标签:
【中文标题】如何在 asp.net 自托管 API 中启用 CORS?【英文标题】:How to enable CORS in asp.net Self-Hosted API? 【发布时间】:2019-07-03 14:23:05 【问题描述】:我在 asp.net 中创建了一个自托管的 Web API,当我从 POSTMAN 调用它时它工作正常,但当我从浏览器调用它时它给出以下错误。
从源“http://localhost:4200”访问“http://localhost:3273/Values/GetString/1”处的 XMLHttpRequest 已被 CORS 策略阻止:无“访问控制-A”
下面是我的服务类
using System.Web.Http;
using System.Web.Http.SelfHost;
namespace SFLSolidWorkAPI
public partial class SolidWorkService : ServiceBase
public SolidWorkService()
InitializeComponent();
protected override void OnStart(string[] args)
var config = new HttpSelfHostConfiguration("http://localhost:8069");
config.Routes.MapHttpRoute(
name: "API",
routeTemplate: "controller/action/id",
defaults: new id = RouteParameter.Optional
);
HttpSelfHostServer server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
protected override void OnStop()
【问题讨论】:
您尝试过使用 Microsoft.AspNet.WebApi.Cors 吗?文档docs.microsoft.com/en-us/aspnet/web-api/overview/security/… 是的,我尝试了,但它对我不起作用即使我尝试在控制器级别启用 cros,但它也不起作用 使用像wireshark或fiddler这样的嗅探器。将工作的 Postman 结果与不工作的应用程序进行比较。修改应用程序,使 http 标头与 Postman 相同。 确保您的服务正在设置以下标头,“Access-Control-Allow-Origin”、“*”、“Access-Control-Allow-Headers”、“Cache-Control、Pragma、Origin、 Authorization, Content-Type, X-Requested-With" "Access-Control-Allow-Methods", "GET, PUT, POST" 在控制器级别上添加了[EnableCors(origins: "*", headers: "*", methods: "*")]
,但仍然无法正常工作。
【参考方案1】:
这里,
经过这么多研究,我找到了解决这个问题的方法。
你只需要安装Microsoft.AspNet.WebApi.Cors
并像config.EnableCors(new EnableCorsAttribute("*", headers: "*", methods: "*"));
一样使用它
希望它能帮助其他人。
谢谢
using System;
using System.ServiceProcess;
using System.Web.Http;
using System.Web.Http.Cors;
using System.Web.Http.SelfHost;
namespace SFLSolidWorkAPI
public partial class DemoService : ServiceBase
public DemoService ()
InitializeComponent();
protected override void OnStart(string[] args)
var config = new HttpSelfHostConfiguration("http://localhost:8069");
config.Routes.MapHttpRoute(
name: "API",
routeTemplate: "controller/action/id",
defaults: new id = RouteParameter.Optional
);
config.EnableCors(new EnableCorsAttribute("*", headers: "*", methods: "*"));
HttpSelfHostServer server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
protected override void OnStop()
【讨论】:
以上是关于如何在 asp.net 自托管 API 中启用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net web api 自托管 / owin / katana
请求实体对于自托管 ASP.Net Web API 来说太大
Azure 中托管的 ASP.Net Web API 高响应时间