config.EnableCors()有时有效,有时却无效

时间:2018-11-03 05:29:54

标签: asp.net-web-api cors angular2-services

我正在使用config.EnableCors()在webapi中进行cors处理。

它可以正常工作并加载网站,但有时导航到其他页面时会出现cors错误。

OPTIONS http://localhost:54234/api/questions 405 (Method Not Allowed)

edit:1 Access to XMLHttpRequest at 'http://localhost:54234/api/questions' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在Web API中启用CORS时遇到类似的问题。我尝试了几种不同的方法,但它们部分解决了该问题。

这是我解决的方法(不确定当时在哪里读到该解决方案):

将以下配置添加到Web配置文件; some_address应该替换为访问Web API的地址。如果您有多个地址,请用';'分隔。

<?xml version="1.0" encoding="utf-8"?>
<configuration> 
  <appSettings>
    <add key="CorsOriginsSetting" value="http://localhost:54323" /> 
  </appSettings> 
</configuration> />

将以下代码添加到您的Web API项目:

using System.Configuration;
using System.Threading.Tasks;
using System.Web.Cors;
using Microsoft.Owin.Cors;
using Owin;

namespace MyWebAPI
{ 
    public partial class Startup
    { 
        public void ConfigureCors(IAppBuilder app)
        {
            var corsPolicy = new CorsPolicy
            {
                AllowAnyMethod = true,
                AllowAnyHeader = true, 
            };

            var origins = ConfigurationManager.AppSettings["CorsOriginsSetting"];

            if (origins != null)
            {
                foreach (var origin in origins.Split(';'))
                {
                    corsPolicy.Origins.Add(origin);
                }
            }
            else
            {
                corsPolicy.AllowAnyOrigin = true;
            }

            var corsOptions = new CorsOptions
            {
                PolicyProvider = new CorsPolicyProvider
                {
                    PolicyResolver = context => Task.FromResult(corsPolicy),
                }
            };

            app.UseCors(corsOptions); 
        }
    }
}

并调用它:

public partial class Startup
{ 
    public void Configuration(IAppBuilder app)
    {       
        //..
        ConfigureCors(app);
        //..
    }
}

希望这会有所帮助。

欢呼和快乐的编码!