0
以下のコントローラがあります。両方のコントローラのすべてのメソッドは同じです。私は汎用ベースコントローラを作成し、この汎用ベースコントローラから両方のコントローラを継承したいと考えています。誰でも助けてくれますか?ウェブAPIの汎用ベースコントローラ
コースコントローラ
public class CoursesController : ApiController
{
CourseRepository repository = new CourseRepository();
public List<Courseinfo> GetAllCourses()
{
var courses = repository.SelectAll();
var c = AutoMapper.Mapper.Map<List<Courseinfo>>(courses);
return c;
}
[ResponseType(typeof(Course))]
public IHttpActionResult GetCourseById(int id)
{
var courses = repository.SelectByID(id);
if (courses == null)
{
return NotFound();
}
var Courseifno = AutoMapper.Mapper.Map<Courseinfo>(courses);
return Ok(Courseifno);
}
// PUT: api/Courses/5
[ResponseType(typeof(void))]
public IHttpActionResult PutCourse(int id, Courseinfo courses)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != courses.CourseId)
{
return BadRequest();
}
//Student s = new Student();
var s = AutoMapper.Mapper.Map<Course>(courses);
repository.Update(s);
repository.Save();
return StatusCode(HttpStatusCode.NoContent);
}
//POST: api/Courses
[ResponseType(typeof(Course))]
public IHttpActionResult PostCourse(Courseinfo course)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var Courses = AutoMapper.Mapper.Map<Course>(course);
repository.Insert(Courses);
repository.Save();
return CreatedAtRoute("DefaultApi", new { id = course.CourseId }, course);
}
// DELETE: api/Courses/5
[ResponseType(typeof(Course))]
public IHttpActionResult DeleteCourse(int id)
{
Course Courses = new Course();
var cour = repository.SelectByID(id);
if (cour == null)
{
return NotFound();
}
repository.Delete(id);
repository.Save();
return Ok(Courses);
}
学生コントローラ
public class StudentsController : ApiController
{
MystudentRepository repository = new MystudentRepository();
public IEnumerable<Studentinfo> GetStudents()
{
var student = repository.SelectAll();
var studentinfo = AutoMapper.Mapper.Map<List<Studentinfo>>(student);
return studentinfo;
}
[ResponseType(typeof(Student))]
public IHttpActionResult GetStudents(int id)
{
var student = repository.SelectByID(id);
if (student == null)
{
// return NotFound();
string message = "No student exist";
throw new HttpResponseException(
Request.CreateErrorResponse(HttpStatusCode.NotFound, message));
}
var studentifno = AutoMapper.Mapper.Map<Studentinfo>(student);
return Ok(studentifno);
}
[ResponseType(typeof(Student))]
public IHttpActionResult PutStudent(int id, Studentinfo students)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != students.StudentId)
{
return BadRequest();
}
//Student s = new Student();
var s = AutoMapper.Mapper.Map<Student>(students);
repository.Update(s);
repository.Save();
return StatusCode(HttpStatusCode.NoContent);
}
[ResponseType(typeof(Student))]
public IHttpActionResult PostStudent(Studentinfo student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var students = AutoMapper.Mapper.Map<Student>(student);
repository.Insert(students);
repository.Save();
return CreatedAtRoute("DefaultApi", new { id = student.StudentId }, student);
}
[ResponseType(typeof(Student))]
public IHttpActionResult DeleteStudent(int id)
{
Student student = new Student();
var Std = repository.SelectByID(id);
if (Std == null)
{
return NotFound();
}
repository.Delete(id);
repository.Save();
return Ok(student);
}
- 方法 ため、各コントローラを継承する方法を、これらの 2 contrllersの汎用ベースコントローラを作るとすることを私を助けてください汎用ベースコントローラ。
しかし、どのように行うには、私を助けてくださいことができますか? – khan
しかし、私はIGenericRepositoryから継承したGenericRepositryを持っています。 – khan
確かに、あなたのクラス/インターフェースを使うべきです。 IIRepositoryはちょうど例の名前だった – Set