Я пытаюсь настроить конечную точку для аутентифицированных HTTP-запросов POST, которые будут обрабатывать запросы, объем тела которых составляет около 15 КБ.
Я следовал описанию в MSDN и определил
var httpListener = (OwinHttpListener) appBuilder.Properties[typeof(OwinHttpListener).FullName];
httpListener.Listener.AuthenticationSchemeSelectorDelegate = request =>
request.HttpMethod == "POST"
? AuthenticationSchemes.IntegratedWindowsAuthentication
: AuthenticationSchemes.Anonymous;
по моему Startup.Configuration
. Это работает как прелесть для небольших запросов, но я получаю HTTP 400 Bad Requests в тот момент, когда я пытаюсь отправить запрос с размером тела около 15 КБ. Чтобы проверить это, я использую
curl -v --ntlm --negotiate -u {username}:{password} -d @myfile.txt http://localhost:8080/my-endpoint
, где myfile.txt
составляет около 15 кБ. Сначала я предположил, что это проблема ограниченности Content-Length, и реализовал промежуточное программное обеспечение , предлагаемое в этом ответе , чтобы изменить ограничение; однако это была красная сельдь, поскольку промежуточное ПО вызывалось только для небольших запросов. Действительно, если я полностью избавлюсь от аутентификации, все будет работать как положено.
Более того, если я использую AuthenticationSchemes.Ntlm
вместо AuthenticationSchemes.IntegratedWindowsAuthentication
, тогда запрос curl проходит без каких-либо проблем, поэтому у меня есть это обходной путь, но мне все еще любопытно, что в первую очередь вызывает проблему, и если есть обходной путь, который не зависит от возврата к NTLM.