2014-12-27 2 views
1

압축 용 응답 필터를 추가 할 HTTP 모듈이 있습니다. 이것은 MetaData에 대한 호출 인 1을 제외한 모든 API 호출에서 작동합니다. [BreezeController] 장식을 제거하면 잘 동작합니다. 문자열 컨텐츠를 가진 HttpResponse 리턴 유형으로 문자열 리턴 유형을 변환하는 조치 필터 속성과 관련이 있다고 생각합니다.압축 응답 필터가 breeze.js에서 실패합니다. 메타 데이터 호출

내가받는 오류는 "예외 메시지 : 기본 압축 루틴의 스트림 상태가 일관성이 없습니다."입니다.

HttpResponse를 반환하도록 정의 된 메서드가 제대로 작동하는 일부 테스트를 수행했습니다. 그래서 나는 그 메소드가 문자열을 반환하도록 정의 된 시나리오를 생각하고, 액션 필터는 런타임에 그것을 HttpResponse로 변경합니다.

어떻게하면이 아이디어를 얻을 수 있습니까?

 HttpApplication app = (HttpApplication)sender; 


     // Check the header to see if it can accept compressed output 
     string encodings = app.Request.Headers.Get("Accept-Encoding"); 

     if (encodings == null) 
      return; 

     Stream s = app.Response.Filter; 
     encodings = encodings.ToLower(); 

     if (encodings.Contains("gzip")) 
     { 
       app.Response.Filter = new GZipStream(s, CompressionMode.Compress); 
       app.Response.AppendHeader("Content-Encoding", "gzip"); 
     } 

답변

0

당신이 무슨 일을하는지의 특성을 몰라하지만 난 [BreezeController] 속성 필터를 떼어 내고 다시 그 바람이 단지 사람을 추가 것을 알고 : 여기

은 BeginRequest에 추가되는 응답 필터의 원한다.

하나의 접근법은 메타 데이터만을 제공하는 별도의 컨트롤러 (ModelMetadataController)를 정의하는 것일 수 있습니다. 이 컨트롤러에는 [BreezeController] 특성이 없습니다. 일반 웹 API 컨트롤러입니다.

그런 다음 Metadata 메서드를 제외한 모든 일반적인 방법을 사용하여 "Breeze 컨트롤러"(ModelController)를 만듭니다.

메타 데이터를 얻기 위해 앱 실행 중에 MetadataStore.fetchMetadata을 통해 클라이언트에서 메타 데이터 컨트롤러를 호출합니다.

이 형식으로 metadataStore을 채우면 쿼리 및 저장 요청을 "실제"웹 API 데이터 컨트롤러로 보내는 EntityManager에서이 값을 사용합니다.

var ds = new breeze.DataService({ 
    serviceName: 'breeze/Model' // the breeze query & save controller 
}); 

var ms = new MetadataStore({ 
    namingConvention: breeze.NamingConvention.camelCase, // assuming that's what you want 
}); 
ms.addDataService(ds); // associate the metadata-to-come with the "real" dataService 

var manager = new breeze.EntityManager({ 
    dataService: ds, 
    metadataStore: ms 
}); 

// the fun bit: fetch the metadata from a different controller 
var promise = ms.fetchMetadata('breeze/ModelMetadata') // the metadata-only controller! 
return promise; // wait on it appropriately 
:

클라이언트 코드를 다음과 같이 보일 수 있습니다

관련 문제