Параметры заголовка запроса CORS не отправляются в Chrome
Я пытаюсь использовать Swagger UI для остальной документации API. API отдыха создан с помощью сервиса WCF. Я решил проблему cors, сервис принимает метод OPTIONS. Но запрос имеет параметр заголовка с именем SessionUUID, этот параметр не отправляется службе. Когда я отлаживаю сервисную сторону, этот параметр не приходит. Эта проблема только в Chrome. Chrome блокирует заголовочные параметры в запросе cors.
Решение проблемы Cors на WCF Service, как это;
Я добавил новое поведение и параметры заголовка определены
public class EnableCorsEndpointBehavior : BehaviorExtensionElement, IEndpointBehavior { ... public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) { var requiredHeaders = new Dictionary<string, string>(); requiredHeaders.Add("Access-Control-Allow-Origin", "*"); requiredHeaders.Add("Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS"); requiredHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept, Accept-Language, SessionUUID, Origin, X-Custom-Header, sessionuuid"); requiredHeaders.Add("Access-Control-Allow-Credentials", "true"); endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new ServiceInspector(requiredHeaders)); } ... }
Я добавил заголовки ответа в инспекторе. Параметр заголовка, который называется SessionUUID, проверяется в AfterReceiveRequest, но из-за этой проблемы он имеет значение null.
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) { try { WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers; string requestTo = request.Headers.To.ToString(); if (!requestTo.Contains("login") && request.GetType().Name != "InternalByteStreamMessage") { if (headers["SessionUUID"] == null) { throw new RestAppException("401", "Oturum bilgisi bulunamadı."); } else { DateTime requestDate = DateTime.Now; string sessionUUID = headers["SessionUUID"] != null ? headers["SessionUUID"].AsString() : headers["sessionuuid"].AsString(); sessionManager.CheckSessionByUUID(sessionUUID, requestDate); sessionManager.UpdateExpireDate(sessionUUID, requestDate); sessionManager.SetSessionByUUID(sessionUUID); } } } catch (RestAppException ex) { ex.Message = "İşlem Başarısız"; throw ex; } catch (Exception ex) { throw ex; } return null; } public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { var httpHeader = reply.Properties["httpResponse"] as HttpResponseMessageProperty; foreach (var item in requiredHeaders) { httpHeader.Headers.Add(item.Key, item.Value); } }
Как я могу решить эту проблему Chrome?
2 ответа
Вам нужно будет добавить расширение Chrome, чтобы разрешить настраиваемые заголовки.
Вот некоторые из них, которые вы могли бы использовать:
Если вы хотите попробовать Mozilla Firefox, используйте его расширение modify-headers.
У меня была похожая проблема . Это может быть связано с URL-адресом.
Моя проблема была решена, когда я ввел "www".
Если вы уже ввели с www, удалите это и попробуйте еще раз.