IIS 托管实体框架 CORS 的 Angular 客户端不允许响应
Posted
技术标签:
【中文标题】IIS 托管实体框架 CORS 的 Angular 客户端不允许响应【英文标题】:Angular client to IIS hosted Entity Framework CORS not allowing response 【发布时间】:2019-05-28 15:08:25 【问题描述】:配置:Angular 6 发送一个 http 请求;它是本地主机:4200。该请求是对托管在 IIS 上的 4000 端口的实体框架(标准 .net)。 它向 /api/Registration/CreateNew 发送一个 POST,传递正文中的数据对象。 使用浏览器直接发送到 localhost:4000 将控制器获取函数作为非 CORS 请求进行了测试,并且它们可以正常工作。
错误:“从源 'http://localhost:4200' 访问 XMLHttpRequest 在 'http://localhost:4000/api/Registration/CreateNew' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:注册:1 它没有 HTTP好的状态。”
以下是来自 4200 (Angular) 的请求头和响应的提琴手快照。
IIS 实体框架 WebConfig:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusivejavascriptEnabled" value="true" />
<add key="allowedCorsOrigins" value="http://localhost:4200" />
<add key="allowedCorsMethods" value="get, post, put, delete, options, batch" />
<add key="allowedCorsHeaders" value="*" />
</appSettings>
App_Start/WebApiConfig.cs
public static void Register(HttpConfiguration config)
config.EnableCors();
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
还在Controller Class中添加了class属性:
[RoutePrefix("api/Registration")]
[EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class RegistrationController : ApiController
根据上面显示的 Fiddler 标头,似乎应该发生 CORS 请求。我在 IIS 控制器行上有断点,它们永远不会被击中,因此(如果我理解正确的话)“飞行前”请求无法允许 CORS 请求。
不幸的是,这是一段相当大的代码,很难在网络上发布。
【问题讨论】:
【参考方案1】:根据您的响应错误消息,它返回 404 错误,而不是 401 错误。 404错误意味着他找不到页面。
据我所知,与 CORS 相关的错误是 401,如下所示:
我建议您可以检查您的应用程序以确保您已使用正确的 url 来访问 web api。
【讨论】:
抱歉延迟接受。我花了一段时间才弄清楚为什么会发生错误。再次感谢您的帮助。以上是关于IIS 托管实体框架 CORS 的 Angular 客户端不允许响应的主要内容,如果未能解决你的问题,请参考以下文章
使集成的安全性和 CORS 与 Asp.Net、Angular 6 和 IIS 一起工作
Azure 代理,请求 IIS 托管 API 时出现 CORS 错误