繁体   English   中英

CORS在Web API中启用,但访问被拒绝

CORS is enable in Web API but access is denied

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我很确定在我的Web API项目中启用了CORS,但拒绝访问。 也许我错误配置了它?

错误:

从' http:// localhost:55817 '访问来自' http:// localhost / ControlTower2WebAPI / api / PurchaseOrder / PagingCriticalPart '的XMLHttpRequest已被CORS策略阻止:对预检请求的响应未通过访问控制检查:它没有HTTP ok状态。

Ajax调用:

<script type="text/javascript">
    $(document).ready(function () {
        var _tableId = 'tableCriticalParts';
        var _table = $('#' + _tableId).DataTable({
            "processing": true,
            "serverSide": true,
            "ajax": {
                url: 'http://localhost/ControlTower2WebAPI/api/PurchaseOrder/PagingCriticalPart',
                type: 'POST',
                contentType: "application/json",
                data: function (data) {
                    //debugger;
                    var model = {
                        draw: data.draw,
                        start: data.start,
                        length: data.length,
                        columns: data.columns,
                        search: data.search,
                        order: data.order
                    };
                    return JSON.stringify(model);
                },
                failure: function (result) {
                    debugger;
                    alert("Error occurred while trying to get data from server: " + result.sEcho);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    debugger;
                    alert("Error occurred while trying to get data from server!");
                }
                ,
                dataSrc: function (json) {
                    debugger;
                    for (key in json.Data) { json[key] = json.Data[key]; }
                    delete json['Data'];
                    return json.data;
                }
            }
            ,
            "columns": [
                { "data": "partNumber", title: "partNumber" },
                { "data": "partDescription", title: "partDescription" }
            ]
        });
    });
</script>

Web API项目的Web.config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
            <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

Web API项目中的WebApiConfig:

public static class WebApiConfig
{
    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 }
        );

        //set API to return JSON
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}
1 个回复

由于行config.EnableCors()没有任何显式配置的情况下启用CORS,我的猜测是您的自定义标头被CORS模块覆盖。

您可以在启用时尝试添加全局CORS配置,例如:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var corsAttr = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(corsAttr);

        // Rest of config ...
    }
}

我建议使用这种方法(具有更严格的起源集)并从web.config中删除<customHeaders>

资料来源: https//enable-cors.org/server_aspnet.html (全球启用)

1 在 Web API 2 中启用 CORS

我有在不同端口上运行的客户端和服务器。 服务器正在运行Web API 2 (v5.0.0-rc1) 。 我尝试安装Microsoft ASP.NET Web API 跨域支持包并在WebApiConfig.cs启用它。 它给了我EnableCors()函数,所以包安装正确。 在这里,您可以在We ...

2 Web API启用CORS无效

我无法使用ajax访问asp.net-web-api中的资源。 我为所有请求启用了cors ,并添加了启用cors属性,但仍然出现错误: No 'Access-Control-Allow-Origin' header is present ...我也尝试过使用特定网站,但仍然存在相同错误。 ...

5 如何启用CORS(JS + MVC Web API)

在我的客户端上,我有以下代码: 然后在“本地服务器”端,我有这个: 这在我的web.config中: 我究竟做错了什么? 我总是提示此错误:不允许从外部源读取。 启用CORS可为您提供帮助。 ...

6 使用凭证启用Cors .web api核心1.1

我正在使用Web api核心1.1和angular2。我在每个HTTP请求中使用令牌和https之类的凭据。 在Internet Explorer中启动时,一切正常,但是在使用chrome和firefox时,获取凭据和Http请求时出现错误。 有人可以告诉我为什么我出错了吗? 谢谢 ...

8 为Web API 1启用CORS .net 4.0

我需要为我的Web API启用CORS,目前我无法升级到Framework 4.5。 (我了解System.Web.Http.Cors.EnableCorsAttribute。) 我试图将以下内容添加到我的Web.config中以查看它是否有效,但它没有: 我还试图通过使用Sys ...

10 在Web API 2 / Token端点上启用CORS

在这里遇到了一个CORS问题。 你可能知道那个... 从源' http:// localhost:4200 '对' http:// localhost:59365 / Token '处的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:它没有 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM