ASP.NET MVC Controller API & Web API Controller
2023-03-08
筆記 ASP.NET MVC Controller API 以及 Web API Controller 的差別與應用時機。
說明
ASP.NET MVC Controller API 和 ASP.NET Web API Controller 都是用於建立 Web Application應用程式的 Controller,主要差別如下:
使用目的
ASP.NET MVC Controller API 旨在支援 MVC(Model-View-Controller)架構,用於創建具有多個檢視和操作的 Web Application。而 ASP.NET Web API Controller 則專注於提供 RESTful Web API 服務。
回傳型別
ASP.NET MVC Controller API的Return Type 可以是 ViewResult, PartialViewResult 或 JsonResult等,用於回傳HTML或JSON格式的資料給客戶端;ASP.NET Web API Controller 的Return Type 通常是IHttpActionResult,它是一個抽象介面,它可根據需要返回各種不同的HTTP回應,例如Ok,BadRequest或NotFound。
路由機制
ASP.NET MVC Controller API使用[Route]屬性來定義控制器和操作方法的路由,而ASP.NET Web API Controller使用[RoutePrefix]和[Route]屬性來定義Web API的路由。
使用時機
ASP.NET MVC Controller API 通常提供用戶端與伺服器之間的互動,例如HTML表單提交和頁面重新整理;ASP.NET Web API Controller 則通常提供用戶端使用HTTP請求與伺服器之間的互動,例如GET,POST,PUT和DELETE等。
Sample Code
Controller API
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult SubmitForm(string name, int age)
{
// Process form data and return a result
return View("Success");
}
}
Web API Controller
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
public UsersController(IUserService userService)
{
_userService = userService;
}
[HttpGet]
public IActionResult GetUsers()
{
var users = _userService.GetUsers();
return Ok(users);
}
[HttpPost]
public IActionResult AddUser(UserDto userDto)
{
var user = _userService.AddUser(userDto);
return CreatedAtAction(nameof(GetUserById), new { id = user.Id }, user);
}
[HttpGet("{id}")]
public IActionResult GetUserById(int id)
{
var user = _userService.GetUserById(id);
if (user == null)
{
return NotFound();
}
return Ok(user);
}
}