启用Web API的多个CORS

12 浏览
0 Comments

启用Web API的多个CORS

我有一个我自己编写的Web API,并且有一个应用程序正在使用它。所以我通过在我的API中的控制器类中添加一个头来为该应用程序添加CORS头:

[EnableCors(origins: "http://localhost:59452", headers: "*", methods: "*")]

上述方法运行良好。现在我还想让更多的应用程序使用这个Web API。我的问题是如何实现这一点?

0
0 Comments

问题出现的原因是在Web API中启用多个CORS(跨域资源共享)时,可能会遇到以下问题:在origins参数中使用逗号分隔多个域名时,浏览器(如Chrome)会报错,提示只允许一个值。

解决方法是使用下面的代码来启用多个CORS:

[EnableCors(origins: "http://localhost:59452,http://localhost:25495,http://localhost:8080", headers: "*", methods: "*")]

这段代码将允许通过逗号分隔的多个域名进行跨域请求。如果想允许任意域名进行跨域请求,可以使用origins:"*"。

然而,需要注意的是,某些浏览器(如Chrome)会阻止这种做法,并报错提示只允许一个值。所以,要启用多个CORS,需要使用上述的多个域名的方式来实现。这样做的好处是可以灵活地控制允许的域名,但缺点是需要手动添加每个允许的域名。

相比之下,一种更简单的方法是使用通配符"*"来允许所有域名进行跨域请求。但需要注意的是,使用通配符可能存在安全风险,因为这样会允许任何域名都能访问API,可能导致安全问题。所以,在使用通配符之前,需要仔细考虑安全性问题,并确保API的安全性。

总结起来,要在Web API中启用多个CORS,可以通过使用逗号分隔的多个域名的方式来实现,或者使用通配符"*"来允许所有域名进行跨域请求。但需要注意的是,使用通配符可能存在安全风险,需要确保API的安全性。

0
0 Comments

Enabling multiple CORS for Web API

问题的出现原因:

在Web API中启用多个CORS时,使用属性参数不允许使用变量,必须使用常量表达式。因此,如果客户端更改其来源或需要添加新的来源,就需要进行代码更改并重新部署到服务器。

解决方法:

作为一种替代方案,可以在WebApiConfig.cs的Register()方法中启用CORS。这样可以在全局范围内启用CORS,但允许动态设置允许的来源。这样可以在数据库中维护一个允许的来源列表,并根据需要进行更新。在任何更改后仍然需要重新启动Web应用程序,但不需要进行代码更改。

解决方法代码示例:

public static class WebApiConfig
{
    private static string GetAllowedOrigins()
    {
        //从数据库获取允许的来源并转换为逗号分隔的字符串
        return "http://www.example.com,http://localhost:59452,http://localhost:25495";
    }
    public static void Register(HttpConfiguration config)
    {
        string origins = GetAllowedOrigins();
        var cors = new EnableCorsAttribute(origins, "*", "*");
        config.EnableCors(cors);
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

是否有一种方法可以在特定操作中动态使用AllowedOrigins列表而不是全局启用?

可以创建一个实现ICorsPolicyProvider接口的自定义属性,并从配置、数据库等任何源获取来源。

这种方法是否解决了Chrome在列表中允许只有一个来源时的问题?

没有解决。

0
0 Comments

在Web API中启用多个CORS(Enabling multiple CORS for Web API)

近期在使用Web API时,遇到了一个问题,即只允许一个来源。根据微软的这篇文章,只允许一个来源,因此无法使用逗号分隔的字符串的方法。在测试网站test-cors中可以使用,但在SPFx的web part中无法使用。

此外,通配符(*)的来源在包含cookie/凭据的情况下无法使用(至少在SPFx中)。

根据上述问题,我整理出以下解决方法:

1. 修改Web API的配置文件,允许多个来源。在配置中添加以下代码:


  
    
      
    
  

2. 如果想要允许所有来源,可以使用通配符(*)。但要注意,在包含cookie/凭据的情况下,通配符是无效的。

通过以上方法,可以解决Web API只允许一个来源的问题,并且可以启用多个CORS。

0