2016-09-10 7 views
0

큰 파일을 입력으로 허용하는 컨트롤러가있는 OWIN 자체 호스트 WebAPI가 있습니다. 이 코드는 문제 나 오류없이 PC에서 작동합니다. 그러나 OSX의 MONO에서는 Chrome의 정지 모드로 유지됩니다. Base64 문자열을 사용하여 작은 크기의 파일을 제공하면 호출이 완료됩니다. 이것은 1.5MB 크기의 파일이 OSX가있는 MONO의 POST에 허용되는 Base64 메시지 크기가 아니라고 결론을 내 렸습니다.모노 OSX Owin 웹 API 설정 - MaxMessageSize를 설정하는 방법?

그러나 HttpRunTime에서 maxContentSize를 사용해 보았고 MaxRequestSizeInBytes를 Gig로 설정하여 OWIN Middleware 구현을 시도했습니다. 이 두 가지 모두 웹 API 컨트롤러에 파일을 POST하고 POST 요청을 보류 상태로 유지하지 못하게합니다.

최대 메시지 크기 설정에 대한 다른 아이디어가 있거나 1.5MB 크기의 파일을 방지하는 MONO가 있는지 알고 싶으시면 알려 주시기 바랍니다.

답변

0

OwinMiddleware를 사용하여 MAC에 대한 해결 방법을 찾았습니다. 메시지 크기를 늘려도 작동하지 않았지만 해결책 아래에서 메시지 크기 제한 (최대 65K)을 무시했습니다.

public override async Task Invoke(IOwinContext context) 
      { 
       try 
       { 
        IOwinRequest request = context.Request; 

        if (request.Path.HasValue && request.Path.Value.Contains("METHODNAMEFORLARGEFILE")) 
        { 
         //TODO: Remove Workaround for MAC to explicitly download whole stream to avoid issues with message size. PC works without this workaround. 
         LogHelper.Logger.Info("OWIN METHODNAMEFORLARGEFILE Request"); 
         var stream = request.Body; 

         string requestBody = await (new StreamReader(stream)).ReadToEndAsync(); 

         var requestData = Encoding.UTF8.GetBytes(requestBody); 
         context.Request.Body = new MemoryStream(requestData); 
        } 

        await Next.Invoke(context); 
       } 
       catch(Exception ex) 
       { 
        LogHelper.Logger.Error(ex.Message, ex); 
        throw ex; 
       } 
      } 
관련 문제