Web API 2 CORS属性不限制CORS请求



我试图将CORS请求限制到几个特定的源,但该服务仍在向所有源提供请求,而不仅仅是我指定的源,我需要限制它们。

WebApiConfig.cs文件如下:

using System.Web.Http;    
using System.Web.Http.Cors;
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Extensions;
using TCApiOdata.Models;
namespace TCApiOdata
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            //Entities here, no issues, they work fine.
            config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
            // Web API routes

             var cors = new EnableCorsAttribute("http://www.domain1.com,http://www.domain2.com", "*", "get", "DataServiceVersion, MaxDataServiceVersion");
             config.EnableCors(cors);
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

我做错了什么,允许其他来源的请求除了我指定的?我还需要注意的是,我在任何控制器或动作上都没有装饰……

您是否使用测试方法测试您的WebAPI ?即使启用了CORS, Webapi也会为所有请求返回响应。问题是,如果Webapi请求的源标头值与CORS中允许的源不匹配,那么响应将没有源标头,因此浏览器安全性将不允许显示响应。如果你和fiddler核对一下,你会发现不同。因此,CORS将由浏览器安全处理,而不是在Webapi中。

我找到了修复,至少对于托管在Azure应用程序服务上的Web Api,就像我的一样。

首先,在Azure门户中打开Web Api站点的应用程序服务。如果你去CORS设置(在"API"部分下),你可以指定允许的起源,Azure确实执行允许的起源。您也可以简单地添加一个*来允许所有的起源。

最新更新