Я отправляю запрос POST в мое приложение .NET CORE с помощью Postman и Insomnia, и мои контрольные точки в методах [HttpPost]
удаляются, но тело пусто, и при отладке Visual Studio показывает, что запрос является GETЗапрос.
Мой класс запуска:
namespace MyBuildingRestfulWebWithCore
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
//services.AddMvc();
services.AddControllers();
services.AddSingleton<IProductService, ProductService>();
services.AddDbContext<FlixOneStoreContext>(options => options.UseSqlServer("myconnectionstring;"));
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
}
}
}
Мой контроллер:
namespace MyBuildingRestfulWebWithCore.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CustomersController : ControllerBase
{
private readonly FlixOneStoreContext _context;
public CustomersController(FlixOneStoreContext context)
{
_context = context;
}
[HttpGet] //this one works
public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers()
{
return await _context.Customers.ToListAsync();
}
[HttpPost("test")] //this one fails because customers variable is null
public async Task<ActionResult<Customer>> PostCustomers([FromBody] Customer customers)
{
if (_context.Customers.Any(customer => customer.Email == customers.Email))
{
return StatusCode((int)HttpStatusCode.Conflict, "Email already in use");
}
_context.Customers.Add(customers);
//...
return CreatedAtAction("GetCustomers", new { id = customers.Id }, customers);
}
[HttpPost("test2")] //this one fails because request.Content is null,
//but Visual Studio debugger shows me that the request.Method is a GET request
public async Task<ActionResult<string>> PostCustomers(HttpRequestMessage request)
{
string body = await request.Content.ReadAsStringAsync();
return body;
}
}
Я использую .NET Core 3.0.0 и отправляю свои запросы как через Почтальон, так иБессонница для подтверждения ошибки не на стороне клиента - я установил тело в Postman для raw -JSON, а для Insomnia - JSON (и мой JSON проверяет)
Мое тело запроса выглядит следующим образом:
{
"id":1,
"gender": "M",
"email":"test@test.com",
"firstname": "Firstname",
"lastname": "LastName",
"dob":"1970-07-05T00:00:0",
"mainaddressid":"mainaddr",
"fax":"fax",
"password": "pw",
"newsletteropted": false
}
Я прочитал эту статью из официальных Документов о том, как перейти на .NET Core 3, но не нашел ничего полезного.
Есть идеи? Я неправильно настраиваю свой класс запуска или неправильно использую какой-либо атрибут? (Я не слишком знаком с .NET Core ...)