Я пытаюсь настроить API в.Net-Core 2.1. Я слежу за этим руководством и столкнулся с проблемой, когда модель автоматически не проверяется (согласно документам Microsoft). В частности, я хочу убедиться, что если запрос POST отправлен с ForeignKey, который не существует, я должен получить ответ BadRequest. Если отправлен правильный ForeignKey, запрос обрабатывается правильно.
Действие:
Отправка запроса POST для добавления кампании с CustomerId, которая не существует.
Ожидается:
Получить ответ BadRequest
Фактически:
Сбой API из-за необработанного исключения DbUpdateException.
Мои файлы выглядят следующим образом:
Context.cs
public class Context : DbContext
{
public Context(DbContextOptions<Context> options)
: base(options)
{ }
public DbSet<Customer> Customers { get; set; }
public DbSet<Campaign> Campaigns { get; set; }
}
Campaign.cs
public class Campaign
{
public long Id { get; set; }
public long CustomerId { get; set; }
public Customer Customer { get; set; }
}
Customer.cs
{
public class Customer
{
public long Id { get; set; }
public string Name { get; set; }
public List<Campaign> Campaigns { get; set; }
}
}
CampaignController.cs
[Route("api/[controller]")]
[ApiController]
public class CampaignController : ControllerBase
{
private readonly Context _context;
public CampaignController(Context context)
{
_context = context;
}
//Get Methods
[HttpPost]
public IActionResult Create(Campaign campaign)
{
_context.Campaigns.Add(campaign);
_context.SaveChanges();
return CreatedAtRoute("GetCustomer", new { id = campaign.Id }, campaign);
}
}
Startup.cs
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var connection = @"Server=(localdb)\mssqllocaldb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<Context>(options => options.UseSqlServer(connection));
}
Это не должно работать так. Контроллер не будет проверять внешние ключи БД. Валидация здесь для проверки ваших ограничений ViewModel, таких как [Required]
,...
Документация: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.1