Trong ASP.NET 5 MVC 6 Microsoft sáp nhập lớp điều khiển MVC bình thường (Controller
) với lớp điều khiển Web Api (ApiController
). Bây giờ chỉ có một lớp Controller
để kế thừa, bao gồm các tính năng của WebApi.Sự khác nhau giữa Bộ điều khiển MVC và Bộ điều khiển API Web trong ASP.NET MVC 6 là gì?
Vì vậy, giờ đây việc phân biệt các bộ điều khiển MVC và WebApi không đơn giản như vậy. Cả hai đều được kế thừa từ lớp Controller
. Sự khác biệt duy nhất tôi có thể phát hiện là thông tin định tuyến của WebApi vẫn được cung cấp bởi các thuộc tính HttpGet
, HttpPost
, HttpPut
và HttpDelete
. Nhưng bây giờ có thể làm tương tự với các bộ điều khiển MVC bằng cách sử dụng định tuyến thuộc tính, chỉ với các thuộc tính khác nhau.
Ngay cả các tính năng dường như đã hợp nhất. Bộ điều khiển MVC hỗ trợ thương lượng nội dung ngay bây giờ.
Các câu hỏi cụ thể là:
Vẫn còn sự khác biệt thực sự hay chỉ là cách các tuyến đường được chỉ định? Giờ đây, cách nào ưu tiên để tạo ứng dụng web?
(Hầu như) trống MVC điều khiển:
public class HomeController : Controller
{
public List<Person> Index()
{
return new List<Person>()
{
new Person() {Firstname = "test1", Lastname = "test2"},
new Person() {Firstname = "test3", Lastname = "test4"}
};
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View("~/Views/Shared/Error.cshtml");
}
}
(Hầu như) có sản phẩm nào điều khiển WebAPI:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/values
[HttpGet]
public IEnumerable<Person> Get()
{
return new List<Person>()
{
new Person() {Firstname = "test1", Lastname = "test2"},
new Person() {Firstname = "test3", Lastname = "test4"}
};
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
EDIT:
Nếu bạn muốn thử nếu đàm phán nội dung hoạt động, bạn phải đưa mã này vào phương thức Startup.ConfigureServices của bạn, bởi vì theo mặc định, kiểu trả về chỉ là JSON.
services.Configure<MvcOptions>(options =>
{
options.AddXmlDataContractSerializerFormatter();
});
@Will Trong MVC 6 không có lớp 'ApiController', chúng hợp nhất nó vào lớp' Controller'. Đây là chính xác những gì bạn nhận được nếu bạn tạo một bộ điều khiển WebApi với Visual Studio – Domysee
Vâng, tôi đoán tôi cần phải nhìn vào MVC6:/ – Will
Yea, nhiều thay đổi thú vị đã xảy ra ở đó – Domysee