CORS включен в веб-API, но доступ запрещен - PullRequest
0 голосов
/ 15 ноября 2018

Я уверен, что CORS включен в моем проекте Web API, но доступ запрещен.Возможно, я неправильно его сконфигурировал?

Ошибка:

Доступ к XMLHttpRequest в 'http://localhost/ControlTower2WebAPI/api/PurchaseOrder/PagingCriticalPart' из источника' http://localhost:55817' заблокирован политикой 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.config проекта Web API:

<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>

WebApiConfig в проекте Web API:

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 Ответ

0 голосов
/ 15 ноября 2018

Поскольку строка 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 ...
    }
}

Я бы рекомендовал использовать этот подход (с более ограниченным набором источников) и удалить <customHeaders> из вашего web.config.

Источник: https://enable -cors.org / server_aspnet.html (Включение глобально)

...