簡體   English   中英

Web API 2 Cors無法正常工作

[英]web api 2 cors not working

我在Web API上創建了一個Web服務,並嘗試從angular 2應用程序中使用它。 我安裝Microsoft.AspNet.WebApi.Core 5.2.3並將其配置為允許cors。 它托管在本地IIS的localhost / RestfulAPI上

WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi 2",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var cors = new EnableCorsAttribute("*", "*", "*"); // origins, headers, methods
        config.EnableCors(cors);
    }
}

調節器

[HttpGet]
[Route("api/product/details")]
public async Task<IHttpActionResult> GetProductsDetails([FromUri]ProductSearch model)
{
    using (var unitOfWork = Factory.Create())
    {
        var products = (from p in await unitOfWork.GetProductsAsync(model?.CategoryID, model?.BrandID, model?.ProductStateID, null, model?.PartnerID,
                    true, model?.Code)
            orderby p.Code
            select p).ToArray();
        return return Json(products);
    }
}

但是我仍然在瀏覽器中出錯。

對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“ Access-Control-Allow-Origin”標頭。 因此,不允許訪問源“ http:// localhost:12012 ”。 響應的HTTP狀態碼為404。

我啟用所有cors怎么可能,但仍然無法正常工作?

Upd.1。 我嘗試處理以下波紋管的期權要求

 public class PreflightRequestsHandler : DelegatingHandler
        {
            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                if (request.Headers.Contains("Origin") && request.Method.Method.Equals("OPTIONS"))
                {
                    var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
                    // Define and add values to variables: origins, headers, methods (can be global)               
                    response.Headers.Add("Access-Control-Allow-Origin", "*");
                    response.Headers.Add("Access-Control-Allow-Headers", "*");
                    response.Headers.Add("Access-Control-Allow-Methods", "*");
                    var tsc = new TaskCompletionSource<HttpResponseMessage>();
                    tsc.SetResult(response);
                    return tsc.Task;
                }
                return base.SendAsync(request, cancellationToken);
            }

        }

但是出現錯誤:飛行前響應中Access-Control-Allow-Headers不允許請求標頭字段Content-Type。

確保您使用的是Api控制器,而不是從Apicontroller類繼承的普通控制器。 我遇到了同樣的問題,然后我發現我使用的是普通控制器,我對其進行了糾正,但我無法從api控制器訪問和獲取數據。

您可以嘗試以下nuget

Nuget for CORS

暫無
暫無

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

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