Автоматическая проверка внешнего ключа не работает Core 2.1

0

Я пытаюсь настроить 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));
    }
Теги:
.net-core

1 ответ

0
Лучший ответ

Это не должно работать так. Контроллер не будет проверять внешние ключи БД. Валидация здесь для проверки ваших ограничений ViewModel, таких как [Required] ,...

Документация: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню