我正在使用c#(.net framework)和odata V4编写一些服务。我的客户是AngularJs。 在我的localhost上,everythink工作正常,但是当我将我的代码发布到服务器(widows server 2012 R2)时,我遇到了问题。 我尝试了不同的解决方案:
试图将Access-Control-Allow-Origin,Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Credentials
放在web.config上,得到401
和500
回复预检。
添加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
。我有假设由于urlencoded的内容类型,使用ODataActionParameters
对象并且它始终为null的enpoint。
答案 0 :(得分:0)
在再次检查戴安娜的链接之后,我做到了。但我做了改变。我为每个请求返回Access-Control-Allow-Origin
和Access-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();
}
}