使用IActionResult作为Actions中的结果类型的优点

Zeu*_*s82 21 asp.net-core-mvc asp.net-core

使用IActionResultWebApi控制器的返回类型而不是您想要返回的实际类型有什么优势或建议?

我见过的大多数示例都返回了IActionResult,但是当我构建我的第一个站点时,我专门使用View Model类作为我的返回类型....现在我觉得我做错了!

Tse*_*eng 17

主要优点是您可以返回错误/状态代码或重定向/资源URL.

例如:

public IActionResult Get(integer id) 
{
    var user = db.Users.Where(u => u.UserId = id).FirstOrDefault();

    if(user == null) 
    {
        // Returns HttpCode 404
        return NotFound();
    }

    // returns HttpCode 200
    return ObjectOk(user);
}
Run Code Online (Sandbox Code Playgroud)

要么

public IActionResult Create(User user) 
{
    if(!ModelState.IsValid) 
    {
        // returns HttpCode 400
        return BadRequest(ModelState);
    }

    db.Users.Add(user);
    db.SaveChanges();

    // returns HttpCode 201
    return CreatedAtActionResult("User", "Get", new { id = user.Id} );
}
Run Code Online (Sandbox Code Playgroud)

  • @HamidMosalla; 技术上并不多,但`IActionResult`是一个接口,`ActionResult`是一个抽象类.虽然来自MVC的所有ActionResults都继承自`ActionResult`,但是没有给出或保证,一些第三方动作结果类也是如此,所以最好使用尽可能低的类型,这里:`IActionResult` (4认同)