![](/img/trans.png)
[英]Web API 2, CORS, NTLM & OWIN / Katana with Angular 2
[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.