如何在学生课程模型中使用WebApi和MVC 5 - ASP.NET

时间:2015-05-14 10:31:09

标签: c# asp.net-mvc design-patterns asp.net-web-api solid-principles

我最近有过开发ASP.NET-MVC应用程序和学习WebApi的经验。我理解API中的action方法是HTTP,因此可以直接生成模型。我也知道我可以使用MVC和WebApi,我很难理解这两者在哪里相互配合,我应该在哪里使用WebAPI,哪些不在单个基于MVC的应用程序中;以下为例;我的第二个问题是我应用MVC和WebApi的地方

enter image description here

学生模特

 public partial class Student
{
    public Student()
    {
        this.StudentCourses = new HashSet<StudentCourse>();
    }

    public int StudentID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<StudentCourse> StudentCourses { get; set; }
}

课程模型

 public partial class Course
{
    public Course()
    {
        this.StudentCourses = new HashSet<StudentCourse>();
    }

    public int CourseID { get; set; }
    public string Title { get; set; }

    public virtual ICollection<StudentCourse> StudentCourses { get; set; }
}

StudentCourseModel

public partial class StudentCourse
{
    [Key]
    public int StudentCourseID { get; set; }

    [Key]
    [ForeignKey("Student")]
    public int StudentID { get; set; }

    [Key]
    [ForeignKey("Course")]
    public int CourseID { get; set; }

    public virtual Course Course { get; set; }
    public virtual Student Student { get; set; }
}

App的功能逻辑

 public class processData
{
    public void addStudent()
    {
        using(var db = new MyDbContext())
        {
            var _student1 = new Student { Name = "waqas" };

            db.Students.Add(_student1);

            db.SaveChanges();
        }

        Console.WriteLine("Press Any Key to Read Students....");
        Console.ReadLine();

        readStudents();
    }


    public void readStudents()
    {
        using (var db2 = new MyDbContext())
        {
            List<Student> _studentRead = new List<Student>();

            _studentRead = (from _student in db2.Students
                                .Include(r => r.StudentCourses.Select(sc => sc.Course))
                                select _student).ToList();

        }
    }

    public void CreateCourse()
    {
        using(var db3 = new MyDbContext())
        {
            var _course1 = new Course { Title = "Math"};
            var _course2 = new Course { Title = "English" };
            var _course3 = new Course { Title = "computing" };
            var _course4 = new Course { Title = "Science" };

            db3.Courses.Add(_course1);
            db3.Courses.Add(_course2);
            db3.Courses.Add(_course3);
            db3.Courses.Add(_course4);

            db3.SaveChanges();
        }
    }

    public void ReadCourses()
    {
        using(var db4 = new MyDbContext())
        {
            var _query2 = from c in db4.Courses
                          orderby c.Title
                          select c;

            foreach(var item in _query2)
            {
                Console.WriteLine(item.CourseID + "     " + item.Title);
            }
        }
    }

    public void AddCourseToStudent()
    {
        using(var db5 = new MyDbContext())
        {
            var _registeration1 = new StudentCourse { StudentID = 7, CourseID = 6};
            db5.StudentCourses.Add(_registeration1);

            var _registeration2 = new StudentCourse { StudentID = 7, CourseID = 8 };
            db5.StudentCourses.Add(_registeration2);

            var _registeration3 = new StudentCourse { StudentID = 7, CourseID = 9 };
            db5.StudentCourses.Add(_registeration3);

            db5.SaveChanges();

        }
    }

2 个答案:

答案 0 :(得分:1)

这是两种不同的技术。 API是您针对API获取数据的方式编程的,它是什么并且返回结果。这个原始结果不是最终用户想要看到的东西,因为它通常是JSON或XML。您的MVC应用程序是面向用户的应用程序,用户与之交互。您可以使用启用了CORS的AJAX调用API,但如果您将MVC和API组合到一个项目中,那么最好将代码解压缩到公共库,这样您就可以直接调用它而无需通过API 。您可以将这两种技术合并到一个项目中的原因主要是出于以下简单原因:您可以在同一台服务器上并排托管它们,使用相同的URL与同一数据库通信。

答案 1 :(得分:1)

通常,您可以使用WebAPI来支持RESTful服务:

  1. 一个javascript应用程序(如SPA,Angular,Knockout等)
  2. 另一个网站(asp.net,第三方等)
  3. 是的,您可以一起使用WebAPI和MVC,但如果您正在构建纯MVC(Razor)前端,那么构建WebAPI调用没有任何价值。您可以使MVC方法可用于任何需要进行的AJAX调用。

    在决定使用哪种架构时,重要的是要考虑比问题中包含的更多因素(即用户数量,公共与内部网站等)。