Настройка 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;
}
}