簡體   English   中英

帶有POST請求的asp.net Web API角度CORS預檢問題

[英]asp.net web api angular CORS preflight issue with POST requests

我有一個配置為使用WINDOWS AUTHENTICATION的webapi。

var cors = new EnableCorsAttribute(origen, "*", "*") { SupportsCredentials = true };
            config.EnableCors(cors);

在我的角度應用程序中,我有以下幾種方法:

GET方法工作完美。

result.CargarAreas = function (callBack, onError) {

        //url = WebApi + "Personas";
        var url = constants.apiPath + "Areas";

        //$http.get(url, { headers: { "Access-Control-Allow-Origin": constants.serverPath } })
        $http.get(url, {
            withCredentials: true
        })
        .then(function (data) {
            callBack(data);
        })
        .catch(function (data) {
            onError(data);
        });
    };

POST方法給我這個錯誤:

result.GuardarContacto = function (callBack, onError, data) {

        //url = WebApi + "Contactos";
        var url = constants.apiPath + "Contactos";

        $http.post(url, data, { headers: { "Access-Control-Allow-Origin": constants.serverPath } })

        .then(function (data) {
            callBack(data);
        })
        .catch(function (data) {
            onError(data);
        });
    };

最后是Web api方法

[HttpGet]
        [Route("api/AutenticationSite")]
        public IHttpActionResult AutenticationSite()
        {
            string user = HttpContext.Current.Request.LogonUserIdentity.Name.ToString();
            string[] subUser = user.Split('\\');
            bool respuesta = UsuariosDao.Authorize(subUser[1]);

            if (respuesta == true)
            {
                return Ok("Authenticated: " + user);
            }
            else
            {
                return BadRequest("Not authenticated" );
            }
        }

以及我們一直在努力解決的DAMN錯誤:

XMLHttpRequest無法加載http:// abcom / api / Contactos 對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“ Access-Control-Allow-Origin”標頭。 因此,不允許訪問來源“ http:// abcom ”。 響應的HTTP狀態碼為401。

更新1

有關請求和響應的信息

請求URL: http:// abcom / api / Contactos請求方法:OPTIONS狀態碼:200 OK遠程地址:181.143.YY.XX:80引用者策略:no-referrer-when-downgrade響應標題(11)請求標題查看源接受: /接受編碼:gzip,放氣,sdch接受語言:es-ES,es; q = 0.8 Access-Control-Request-Headers:content-type Access-Control-Request-Method:POST Cache-Control:no -cache連接:keep-alive主機:abcom來源: http:// abcom語法 :no-cache參考網址:http://abcom/Index.html User-Agent:Mozilla / 5.0(Windows NT 10.0

在此處輸入圖片說明

刪除角度代碼中的訪問控制標頭設置。 似乎您已在多個位置設置了此標頭,因此盡管您的Web API代碼啟用了cors,但輸出卻沒有。

密切注意,提防,小心

  • web.config => httpRuntime => httpHandlers =>標頭被設置
  • MVC.CORS NuGet的用法,而不是WebAPI.CORS包的用法。 在這里,您需要使用一個WebAPI(盡管它取決於MVC,所以請不要將其卸載)
  • 無需在global.asax中更改OPTIONS動詞處理程序
  • 多次調用在不同的地方config.EnableCors(Global.asax中和webapi.config)。 在您的來源中搜索“ cors”只是為了確保這一點。
  • 檢查是否在全局級別或控制器/操作級別上設置了屬性。 您的特定操作可能已被排除在外。 嘗試在其他控制器上發表文章,以確保
  • 變量“ origen”正確存儲了客戶端的IP地址和端口。 任何偏差都將導致不發送標題。 嘗試使用star *而非特定客戶端進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM