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 一起工作

IIS 中托管的 WebAPI 中的 CORS 问题

Azure 代理,请求 IIS 托管 API 时出现 CORS 错误

WCF 和 IIS 的实体框架问题

CORS(跨源资源共享)https 不工作(IIS 托管 WCF 休息启用端点)

Angular $resource 和自托管 WebAPI 的 CORS 问题