Как использовать SupportsCredentials в ASP.NET Web API 1.x? - PullRequest
0 голосов
/ 08 ноября 2018

все. Мой английский оставляет желать лучшего. Я надеюсь, что предшественники могут понять. У меня сегодня проблема с разработкой: технологический стек - angular 6.x и Web API 1.x. Я использовал Withcredentials = true в угловом перехватчике. Как показано в следующем коде:

intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    req = req.clone({
      withCredentials: true,
      url: AppIdConfig.serverUrl + req.url,
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    })
    });
    // ... other code
 }

Для Cros мой код C # выглядит следующим образом:

 protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        bool isCorsRequest = request.Headers.Contains(Origin);
        bool isPreflightRequest = request.Method == HttpMethod.Options;
        if (isCorsRequest)
        {
            if (isPreflightRequest)
            {
                return Task.Factory.StartNew<HttpResponseMessage>(() =>
                {
                    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                    response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());

                    string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
                    if (accessControlRequestMethod != null)
                    {
                        response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
                    }

                    string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
                    if (!string.IsNullOrEmpty(requestedHeaders))
                    {
                        response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
                    }

                    return response;
                }, cancellationToken);
            }
            else
            {
                return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
                {
                    HttpResponseMessage resp = t.Result;
                    resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
                    return resp;
                });
            }
        }
        else
        {
            return base.SendAsync(request, cancellationToken);
        }
    }

enter image description here Надеюсь получить вашу помощь, спасибо!

Ответы [ 2 ]

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

попробуйте добавить ключ Access-Option-Allow-Credentials: true для HttpHeaders

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

Вы должны инициализировать политику CORS в своем проекте ASP.NET Web API. Он позволяет вам принять или отклонить (в зависимости от вашей политики) запрос от вашего клиента.

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Эта ссылка может вам помочь;)

...