Конфигурирование и кодирование модели отношения «один ко многим» и контроллера (.NET MVC + Entity Framework) - PullRequest
0 голосов
/ 05 июня 2019

Я недавно программист-самоучка, поэтому, пожалуйста, прости мое невежество, мое отсутствие знаний и мою неспособность правильно объяснить себя ...

Я создаю API, который имеет отношение один ко многим. Его целью является получение адресов электронной почты для списков подавления электронной почты.

API должен иметь функцию POST, которая отправляет данные в две таблицы с именами SuppressionListNames и SuppressionListEmails. Также требуется функция удаления для удаления писем из SuppressionListEmails.

Необходимо указать имя списка подавления и адрес электронной почты.

Таблица SuppressionListNames должна принимать имя списка подавления, а почта SuppressionListEmail должна иметь как адрес электронной почты, так и имя списка подавления.

Обе таблицы должны иметь поля InsertDateTime, которые регистрируют, когда запись была добавлена ​​в базу данных.

Я никогда не делал этого раньше ... Я построил только четыре API один на один. Я попробовал несколько уроков и смог собрать воедино то, что вы видите перед собой.

Вот основные источники, которые я использовал для создания этого:

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

https://www.youtube.com/watch?v=bFbb8Wetq2o

У меня возникают проблемы с правильным кодированием моделей, и я не знаю, как даже запустить контроллер ... В настоящее время контроллер построен точно так же, как предыдущий проект, который я построил. Это здесь как отправная точка, но я понятия не имею, куда идти отсюда ...

Вот модель SuppressionListName:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
using CustomOAuthTutorial.WebAPI.Models;

namespace CustomOAuthTutorial.WebAPI.Models
{
    public class SuppressionListName
    {

        [Key]
        public int SuppressionId { get; set; }

        public string ListName { get; set; }
        public string InsertDateTime { get; set; }
        public IList<SuppressionListEmail> SuppressionEmails { get; set; }

    }
}

Вот модель SuppressionListEmails:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
using CustomOAuthTutorial.WebAPI.Models;

namespace CustomOAuthTutorial.WebAPI.Models
{
    public class SuppressionListEmail
    {
        [Index(IsUnique = true)]
        [Key]
        public int Id { get; set; }

        public virtual SuppressionListName SuppressionListName { get; set; }
        [ForeignKey("SuppressionId")]
        public IList<SuppressionListName> SuppressionId { get; set; }
        public string SuppressionEmails { get; set; }

        public string ListName { get; set; }

        public string InsertDateTime { get; set; }


    }
}

Вот контроллер Suppression:

using CustomOAuthTutorial.WebAPI.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Timers;
using System.Data.Entity;
using System.Threading.Tasks;
using System.Web.Http.Results;
using M1_Data;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Web.Http.ModelBinding;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OAuth;
using CustomOAuthTutorial.WebAPI.Providers;
using CustomOAuthTutorial.WebAPI.Results;
using CustomOAuthTutorial.WebAPI.Utilities;
using System.Configuration;
using System.Net;



namespace CustomOAuthTutorial.WebAPI.Controllers
{
    public class SuppressionController : ApiController
    {
        private AppDBContext db;

        public SuppressionController()
        {
            db = new AppDBContext();
        }





        //  POST: api/Suppression
        [HttpPost]
      //    [Route("api/post/Suppression")]
        public IHttpActionResult PostSuppression(SuppressionListEmail suppressionListEmail)


        {
            try

            {



                //   SuppressionListEmail suppressionListEmail = 


                //  IEnumerable<SuppressionListEmail> PostSuppression = Suppression(SuppressionListName, SuppressionEmails);




                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }


                db.SuppressionListEmails.Add(suppressionListEmail);
                db.SaveChanges();





                return Ok();


            }

            catch (Exception ex)

            {

                return Content(HttpStatusCode.OK, string.Format("{0}", ex));

            }



        }

    }
}

Когда я пытаюсь использовать этот вызов API POST (http://localhost:1661/api/SuppressionListEmail?SuppressionListName=testlist&SuppressionEmails=email@email.com) в Почтальоне, я получаю следующее:

    "Message": "No HTTP resource was found that matches the request URI 'http://localhost:1661/api/SuppressionListEmail?SuppressionListName=testlist&SuppressionEmails=email@email.com'.",
    "MessageDetail": "No type was found that matches the controller named 'SuppressionListEmail'."
}

Что имеет смысл, потому что я знаю, что модели и контроллер не настроены правильно ... Я, к сожалению, слишком неопытен, чтобы знать, как заставить его работать правильно ...

Большое спасибо за чтение! Я очень ценю ваше время. :)

...