Web APIでWebサービスを作成し、Angular 2アプリケーションから使用しようとします。 Microsoft.AspNet.WebApi.Core 5.2.3をインストールし、corsを許可するように構成します。 それは/ localhostのでローカルIIS上RestfulAPIweb api 2 cors not working
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」ヘッダーがありません。 Origin 'http://localhost:12012'はアクセスできません。応答にHTTPステータスコード404がありました。
どのようにすべてのコードを有効にしても、まだ動作しませんでしたか?
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);
}
}
ように要求するが、エラーを取得するオプションを処理しよう:リクエストヘッダフィールドのContent-Typeは、プリフライト応じて、アクセス制御 - 許可 - ヘッダによって許可されていません。
これはオプションのリクエストではありませんか? –
違いがあれば教えてください。この場合、どのように有効にするのですか? –
すべての前に、EnableCorsをメソッドの先頭に移動してみてください。 – jpgrassi