发布请求odata与cors

问题描述 投票:0回答:1

我正在使用c#(.net framework)和odata V4编写一些服务。我的客户是AngularJs。在我的localhost上,everythink工作正常,但是当我将我的代码发布到服务器(widows server 2012 R2)时,我遇到了问题。我试过不同的解决方案

  1. 试图将Access-Control-Allow-Origin,Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Credentials放在web.config上,得到401500响应预检。
  2. 添加CorsHandler类来处理预检/添加Application_BeginRequest来处理它,没有运气(返回那里的Access-Control-Allow-Origin等...)。还有来自这里的东西:Handling CORS Preflight requests to ASP.NET MVC actions

最后尝试了Microsoft.AspNet.WebApi.Cors包:

 var cors = new EnableCorsAttribute("cool.mydomain", "*", "*");
    config.EnableCors(cors);

猜猜看,它也无济于事!

当我发送POST方法时,我必须用Content-Type:"x-www-form-urlencoded"发送它,因为application/json触发预检,并且由于某种原因不支持text/plain。我有一个使用ODataActionParameters对象的enpoint,并且它总是为null,假设因为内容类型urlencoded。

希望有人可以帮助我,我正在敲打我的脑袋......

c# cors odata angularjs-http
1个回答
0
投票

在再次检查戴安娜的链接后,我做到了。但我做了改变。我为每个请求返回Access-Control-Allow-OriginAccess-Control-Allow-Credentials,如果它的OPTIONS请求,我返回其余的标题:

 protected void Application_BeginRequest()
            {
                Context.Response.AddHeader("Access-Control-Allow-Origin", ORIGINS);
                Context.Response.AddHeader("Access-Control-Allow-Credentials", "true");
                if (Context.Request.HttpMethod == "OPTIONS")
                {                    
                    Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                    Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST PUT, DELETE, OPTIONS");                    
                    Context.Response.End();
                }
            }
© www.soinside.com 2019 - 2024. All rights reserved.