ASP.NET MVC Controller API & Web API Controller


  1. 說明
    1. 使用目的
    2. 回傳型別
    3. 路由機制
    4. 使用時機
  2. Sample Code

筆記 ASP.NET MVC Controller API 以及 Web API Controller 的差別與應用時機。

logo

說明

the difference between ASP.NET MVC Controller API and Web API Controller
ChatGPT Prompt

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。

Content Negotiation

路由機制

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);
    }
}