Получение fileName из HttpRequest

Способ иметь отдельную реализацию выглядит следующим образом.

//inner_foo.h

template <typename T>
struct Foo
{
    void doSomething(T param);
};


//foo.tpp
#include "inner_foo.h"
template <typename T>
void Foo<T>::doSomething(T param)
{
    //implementation
}


//foo.h
#include <foo.tpp>

//main.cpp
#include <foo.h>

inner_foo имеет форвардные объявления. foo.tpp имеет реализацию и включает inner_foo.h; и foo.h будет иметь только одну строку, чтобы включить foo.tpp.

Во время компиляции содержимое foo.h копируется в foo.tpp, а затем весь файл копируется в foo.h после который он компилирует. Таким образом, ограничений нет, и именование согласовано в обмен на один дополнительный файл.

Я делаю это, потому что статические анализаторы для кода разбиваются, когда он не видит передовые объявления класса в * .tpp. Это раздражает при написании кода в любой среде IDE или с помощью YouCompleteMe или других.

0
задан Uwe Keim 3 March 2019 в 17:58
поделиться

4 ответа

Вы также можете перемотать внутри контроллера, если хотите:

if (request?.ContentLength != null)
{
    request.EnableRewind();

    request.Body.Seek(0, SeekOrigin.Begin);

    using (var reader = new StreamReader(request.Body, Encoding.UTF8))
    {
        body = reader.ReadToEnd();

        //Do your thing with the body content
    }

}
0
ответ дан Tarik Tutuncu 3 March 2019 в 17:58
поделиться

Эта ошибка возникает, если вы не добавили этот атрибут поверх метода действия вашего контроллера. Это используется для отключения привязки модели значения формы здесь, чтобы взять на себя управление обработкой потенциально больших файлов.

[DisableFormValueModelBinding]

0
ответ дан Ghazanfar Khan 3 March 2019 в 17:58
поделиться

Итак, я нашел обходной путь - включить перемотку HttpRequest. Для этого мне нужно было добавить этот фрагмент кода в Startup.cs:

app.Use(async (context, next) => {
    context.Request.EnableRewind();
    await next();
});

Таким образом, исключение UnexpectedEndOfStream не будет выброшено, поскольку поток можно перематывать.

0
ответ дан J. Loe 3 March 2019 в 17:58
поделиться

Вы можете загрузить данные, используя файл контроля доступа, принимая во внимание, что файл имеет общедоступный URL-адрес.

            var webRequest = HttpWebRequest.Create(url);

            using (var webResponse = webRequest.GetResponse())
            {
                var file_size = webResponse.Headers.Get("Content-Length");
                var file_name = webResponse.ResponseUri.Segments.Last();
            }
0
ответ дан Alberto Santos 3 March 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: