在 Web API 中启用了 Asp.Net MVC CORS,但不再发送标头

Posted

技术标签:

【中文标题】在 Web API 中启用了 Asp.Net MVC CORS,但不再发送标头【英文标题】:Asp.Net MVC CORS enabled in Web API but headers no longer being sent 【发布时间】:2020-06-24 23:55:44 【问题描述】:

我有两个 DotNet MVC 站点。一个通过 AJAX GET 调用从另一个访问 Web API。

这一切都奏效了,但现在已经停止运作。我几乎没有进行任何更改,所以我想知道我的主机是否可能进行了更改(例如在 IIS 中),这会阻止它工作?

这是我最初的工作方式......

我安装了 Microsoft.Aspnet.Cors 和 Microsoft.Aspnet.WebApi.Cors 包。

我添加了以下代码...

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        config.EnableCors();

在我的 API 控制器中,我添加了...

namespace Webscope.Controllers

    [EnableCors(origins: "[URL of my other website]", headers: "*", methods: "*")]      
    public class EventAPIController : ApiController 

这曾经可以工作,但现在在控制台中收到以下错误:

跨源请求被阻止:同源策略不允许读取位于 https:[my website URL]/EventRead/1-1-2015/12-12-2099 的远程资源。 (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。

为了响应@FoggyDay 下面的回答,我从 Fiddler 调用了 API 并获得了以下标头...

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Frame-Options: AllowAll
X-Powered-By: ASP.NET
Date: Fri, 13 Mar 2020 03:56:39 GMT
Content-Length: 198

因此看起来好像 CORS 标头未包含在响应中。谁能告诉我为什么会这样?

更新

我在之前尝试使 CORS 正常工作时发现了一些无关代码。现在我已经删除了这段代码,我在 Fiddler 中看到了 CORS 标头。

Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: https://[ calling website's URL ]/

但是我在调​​用站点的控制台中仍然收到以下错误...

访问 XMLHttpRequest 在 'https://[ 目标站点 URL ]/api/EventRead/1-1-2015/12-12-2099' 来自 来源“[调用网站的 URL]”已被 CORS 阻止 策略:对预检请求的响应未通过访问控制 检查:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。

【问题讨论】:

【参考方案1】:

建议:

    退出您的“新”更改。听起来您无意中引入了第二个标头。

    阅读:Reason: CORS header 'Access-Control-Allow-Origin' missing

    查看您的 HTTP 流量,例如 Fiddler。确认您正在发送标头...并确认您允许主机和端口的正确组合。

    如果您仍然遇到问题,请返回确切的错误消息和相关的 HTTP 标头。

【讨论】:

好的,我已经更新了我上面的问题。 Fiddler 返回了正确的结果数据,但没有 CORS 标头。 问:您更新的 HTTP 响应来自响应您的 Ajax 调用的 IIS 服务器,对吗?它正在运行 ASP.Net,对吗?这是您的“Web API”服务器,对吗?我期望Access-Control-Allow-Origin: http://xyz:1234(主机名/端口号)作为响应标头之一,[EnableCors(origins:...)] 属性应该为您做到这一点。 感谢您的帮助。这是对您所有问题的肯定答案。我已经联系了房东,他们说他们没有改变任何可能影响它的东西。我可能会尝试在 web.config 中启用 CORS。 很抱歉听到这个消息 :( 请查看此链接:***.com/a/38945791/3135317。请告诉我们您是如何解决的! @FoddyDay 很抱歉耽搁了这么久,我不得不紧急处理另一个项目,但我又回来了,而且我更进一步了。请参阅上面的新信息。谢谢。

以上是关于在 Web API 中启用了 Asp.Net MVC CORS,但不再发送标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 ASP.NET Core Web API 中启用 BSON 序列化?

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

如何在 WEB API 的 ASP.NET MVC 控制器级别中启用 CORS? [复制]

ASP.NET Web API将MV响应转换为MVC 4中的json List

在 asp net core web api v3.0 中启用 CORS 的问题

400 仅在启用 cors 时响应 asp.net web api POST 请求