CORS与OData在Web.修改服务器响应的报头

本文关键字:服务器 响应 报头 修改 Web OData CORS | 更新日期: 2023-09-27 18:12:20

当实现OData端点并试图从不同的域访问时,我正在运行到缺少响应头"access - control - allow - origin"预飞行请求问题的错误。对于普通的api控制器,可以添加Access-Control-Allow-Origin头以使其工作(如下所示)。然而,与OData我挣扎在哪里修改请求头可以做到。Web API是否支持它?

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public async Task<IHttpActionResult> Post(Movie movie)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        // How to sneak in sth like below to Created method or globally:  ?
        // HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, movie);
        // response.Headers.Add("Access-Control-Allow-Origin", "*");
        await _service.AddMovie(movie);
        return Created(movie);
    }

在浏览了多个来源后,这是我发现的最好的:https://forums.asp.net/t/2032931.aspx?How+to+enable+CORS+in+Odata+NET+service+,只有这是webforms,我努力在Web API中重新应用它。

编辑我关于webforms的陈述是错误的,请看下面我的回答

CORS与OData在Web.修改服务器响应的报头

我使用了我之前附加的示例https://forums.asp.net/t/2032931.aspx?How+to+enable+CORS+in+Odata+NET+service+,只是做了一些修改,如下所示,它对我来说很好,可以让CORS运行Odata (Odata V3, Chrome, Web API 2.2)。我关于这是webforms的声明是非常错误的-它只是在应用程序启动时处理事件(在Adam Freeman的Pro MVC 5平台书(https://www.amazon.com/Pro-ASP-NET-MVC-5-Platform/dp/1430265418)中有很好的解释)

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Context.Request.Path.Contains("odata/"))
        {
            Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
            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.AddHeader("Access-Control-Allow-Credentials", "true");
        }
    }
相关文章: