Настройка Mono OSX Owin Web API - Как настроить MaxMessageSize?

У меня есть OWIN Selfhosted WebAPI с контроллером, который принимает большой файл в качестве входных данных. Код работает на ПК без проблем и ошибок. Однако в MONO на OSX сообщение остается в режиме зависания в Chrome. Когда я предоставляю файл небольшого размера, используя строку Base64, вызов проходит. Это помогло мне сделать вывод, что мой файл размером 1,5 МБ не является приемлемым размером сообщения Base64 для POST на MONO с OSX.

Однако я попытался использовать maxContentSize для выступления на HttpRunTime, а также попробовал реализацию промежуточного программного обеспечения OWIN с установкой MaxRequestSizeInBytes на Gig. Оба из них не позволили мне отправить файл еще в Web API Controller и запрос остается в состоянии ожидания.

Пожалуйста, дайте мне знать, если у вас есть какие-либо другие идеи по настройке максимального размера сообщения или знаете, есть ли что-то в MONO, что мешает файлу размером 1,5 МБ.

1 ответ

Решение

Я нашел обходной путь для MAC, используя OwinMiddleware. Даже если я увеличил размер сообщения, это не сработало, однако приведенное ниже решение позволило мне обойти ограничение размера сообщения (не более 65 КБ).

 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;
                }
            }
Другие вопросы по тегам