代码之家  ›  专栏  ›  技术社区  ›  ak1

CORS发布IIS 8 Windows Server 2012

  •  1
  • ak1  · 技术社区  · 9 年前

    脚本: 我有两个应用程序,一个是“SPA web应用程序”,另一个是部署在Windows Server 2012上的IIS 8.0上的“web API 2.0”。

    错误: 网站可以在同一台机器上访问并正常工作,但不能从外部访问,网页加载正确,但对API的ajax调用会生成以下错误。。。

    已阻止跨源请求:同源策略不允许读取位于的远程资源。这可以通过将资源移动到同一域或启用CORS来解决。

    在控制器级别 我添加了以下属性: [EnableCors(起源:“ “,标题:” “,方法:”*“,SupportsCredentials=true)]

    还启用了 WebApiConfig.cs

    public static void Register(HttpConfiguration config)
        {
                // Web API configuration and services
    
                // Web API routes
                config.MapHttpAttributeRoutes();
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "ActionApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional, action = "DefaultAction" }
                );
    
                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
        }
    

    web.config文件 服务器配置如下。。

    <system.webServer>
       <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
       </handlers>
    </system.webServer>  
    

    下面是 ajax 呼叫

    $.ajax({
            type: 'get',  
            url: webApiUrl,
            success: function (response) {
                // some logic here
            },
            error: function (response) {
                // some logic here
            },
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true
        });
    

    更多详情:

    我已经在Windows Server 2008 R2上的IIS 7.5上部署了相同的网站,它工作正常,没有任何问题。

    其次,我还尝试在IIS 8中添加以下响应标头。。 访问控制允许标头-内容类型 访问控制允许方法-POST、GET、OPTIONS

    还尝试更改web.config中的以下值

    到目前为止,这些都没有对我奏效。正在寻求进一步帮助。。。

    修复::这只是防火墙阻止了托管的webapi端口:(

    1 回复  |  直到 9 年前
        1
  •  0
  •   ak1    6 年前

    只是防火墙阻止了托管的webapi端口