代码之家  ›  专栏  ›  技术社区  ›  Yogi Bear

角度客户端到以IIS为宿主的实体框架CORS不允许响应

  •  0
  • Yogi Bear  · 技术社区  · 6 年前

    配置:Angular6发送一个HTTP请求;它是本地主机:4200。请求是指向位于端口4000的IIS上的实体框架(Standard.net)。 它向/api/registration/createnew发送一个post,并在主体中传递数据对象。 使用直接发送到localhost:4000的浏览器,将控制器get函数作为非CORS请求进行测试,它们工作正常。

    错误:“访问xmlhttprequest at” http://localhost:4000/api/Registration/CreateNew “起源” http://localhost:4200 '已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:注册:1它没有HTTP OK状态。'

    下面是4200(角度)的头请求和响应的小提琴快照。

    enter image description here

    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>
    

    应用程序启动/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 }
            );
        }
    

    还向控制器类添加了class属性:

        [RoutePrefix("api/Registration")]
    [EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
    public class RegistrationController : ApiController
    {
    

    根据上面显示的fiddler头,似乎应该发生CORS请求。我在IIsController行上有断点,它们永远不会被击中,因此如果我正确理解它,“飞行前”请求将无法允许CORS请求。

    不幸的是,这是一个相当大的代码块,很难放到网络上。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Brando Zhang    6 年前

    根据您的响应错误消息,它返回404错误,而不是401错误。 404错误意味着他找不到页面。

    据我所知,与CORS相关的错误是401,如下所示:

    enter image description here

    我建议您检查您的应用程序,以确保您使用了正确的URL来访问Web API。