无法为web api启用CORS

时间:2017-07-12 10:01:59

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

我尝试了一切,但无法为我的WebApi项目启用CORS。我想我错过了一些东西或者没有做对。 我的StartUp.config是:

public void Configuration(IAppBuilder app)
        {

            HttpConfiguration config = new HttpConfiguration();
            // Web API routes
            //app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

            config.MapHttpAttributeRoutes();
            config.EnableCors(new System.Web.Http.Cors.EnableCorsAttribute("http://www.test.ca", "*", "GET,POST")); //enable only for this domain

            ConfigureOAuth(app);

            app.UseWebApi(config);
            ConfigureAutofac(app, config);
        }

我的api控制器:

            [HttpPost]
            [Authorize]
            [Route("api/Accounts/GetTestTest")]
            [System.Web.Http.Cors.EnableCors("http://www.test.ca", "*", "*")]
            public HttpResponseMessage GetTestTest()
            {

                return this.Request.CreateResponse(System.Net.HttpStatusCode.OK);
            }

这里我应该受到限制,因为我的请求来自在localhost上运行的MVC应用程序。我也使用令牌来授权用户。 我有什么想法或错误的想法?

编辑请求来自MVC控制器操作,如下所示:

static string CallApi(string url, string token, LogInRequest request)
    {
        System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
        using (var client = new HttpClient())
        {
            if (!string.IsNullOrWhiteSpace(token))
            {
                var t = Newtonsoft.Json.JsonConvert.DeserializeObject<CashManager.Models.Global.Token>(token);

                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + t.access_token);
            }

            var response = client.PostAsJsonAsync<string>(url,string.Empty).Result;
            return response.Content.ReadAsStringAsync().Result;
        }
    }

1 个答案:

答案 0 :(得分:1)

CORS不适用于从后端发出的请求。它仅适用于通过AJAX从浏览器发出的请求。

您需要进行基于IP地址的过滤或其他阻止来自某些地方的请求。您的身份验证可能足够好。