如何在 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 来说太大

csharp 自托管ASP.NET Web API的示例

Azure 中托管的 ASP.Net Web API 高响应时间

强大的自托管服务器的最佳选择:WCF 与 ASP.NET Web Api

帮助:如何在 ASP.NET 开发服务器上启用 Windows 身份验证?