在 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