Короче говоря, версия curl
для Windows не ведет себя так же, как другие.Либо используйте двойные кавычки, либо используйте версию Linux curl
из подсистемы Windows для Linux.
Длинное объяснение
Если разные вызовы curl приводят к разным ответам, ясночто curl делает что-то другое, а не ASP.NET.Использование отладочного прокси-сервера, такого как Fiddler, показывает, что первый вызов отправляет:
POST http://localhost:5001/api/values HTTP/1.1
Host: localhost:5001
User-Agent: curl/7.55.1
Accept: */*
Proxy-Connection: Keep-Alive
Content-Type: application/json
Content-Length: 29
'{username:abc,password:abc}'
Замена одинарных и двойных кавычек на:
curl -H "Content-Type: application/json" -X POST -d "{'username':'abc','password':'abc'}" http://localhost:5001/api/values --insecure -v -x 127.0.0.1:8888
Отправка:
POST http://localhost:5001/api/values HTTP/1.1
Host: localhost:5001
User-Agent: curl/7.55.1
Accept: */*
Proxy-Connection: Keep-Alive
Content-Type: application/json
Content-Length: 35
{'username':'abc','password':'abc'}
Usin Windows Subsystem для Linux
Всего этого можно избежать, используя двоичные файлы Linux через Windows Subsystem для Linux .Это полная среда пространства пользователя Linux.В этом случае оба запроса отправляют действительный JSON:
{"username":"abc","password":"abc"}
и
{'username':'abc','password':'abc'}