2016-06-28 5 views
0

私は残りのAPIドキュメントのためにswagger UIを使用しようとしています。 WCFサービスで作成されたRest API。私はcors問題を解決し、サービスはOPTIONSメソッドを受け入れます。しかし、リクエストにはSessionUUIDという名前のヘッダパラメータがあり、このパラメータはサービスに送信されません。私がサービス側をデバッグするとき、このパラメータは来ません。この問題はChromeでのみ発生します。 corsリクエストのヘッダーパラメータへのクロムブロック。CORSリクエストヘッダーパラメータがChromeで送信されない

このようなWCFサービスでCorsの問題を解決するには、次のようにします。

  1. Iは新しい動作とヘッダのparamsを

    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)); 
        }  
        ... 
        } 
    
    に定義されている追加
  2. Iはインスペクタの応答ヘッダを追加しました。この問題のため、SessionUUIDという名前のHeaderパラメータは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); 
        } 
    } 
    

どのように私は、このクロムの問題を解決することができますか?

答えて

0

カスタムヘッダーを使用できるようにChrome拡張機能を追加する必要があります。

  1. WebRequestAPI
  2. Mod Header

場合は、あなたがその拡張子modify-headersを使用し、Mozilla Firefoxのを試してみたい:

は、ここでは、使用できるものもあります。

+0

Modヘッダーが大変ありがとうございます。しかし、私はサーバー側でこの問題を解決する必要があります。 – ebruszl

+0

これを追加してみてください:requiredHeaders.Add( "Access-Control-Expose-Headers"、 "SessionUUID"); – Sampada

関連する問題