【问题标题】:Advantage of using IActionResult as result type in Actions在 Actions 中使用 IActionResult 作为结果类型的优势
【发布时间】:2016-10-26 04:21:32
【问题描述】:

使用IActionResult 作为 WebApi 控制器的返回类型而不是您想要返回的实际类型有什么好处或建议?

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

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc


    【解决方案1】:

    主要优点是您可以返回错误/状态代码或重定向/资源 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);
    }
    

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

    【讨论】:

    • @KiranChalla 我不明白我们用IActionResult 能得到什么,而ActionResult 不能得到,ActionResult 在某种程度上限制了我们吗?互联网上的其他答案并不那么引人注目。
    • @HamidMosalla;从技术上讲并不多,但IActionResult 是一个接口,ActionResult 是一个抽象类。虽然 MVC 中的所有 ActionResults 都继承自 ActionResult,但不能给出或保证某些 3rd 方操作结果类会这样做,因此最好使用尽可能低的类型,这里:IActionResult
    • @Tseng 我知道IActionResult' is an interface and doesn't have the synchronous version of ExecuteResult` 方法而不是ActionResult,从消费者的角度来看,我没有发现任何不同,我认为这可能更像是一个框架设计决策我们这个框架的消费者不应该太在意。
    • @Tseng 我迟到了,但你也可以用IActionResult返回BadRequestCreatedAtActionResult,这使得IActionResult看起来没有优势然后根据你的例子。
    • @thesystem:问题是返回IActionResult vs 返回T
    【解决方案2】:

    主要优点是您可以使用模拟框架轻松测试您的代码。

    在构建控制器时,您也可以轻松更改返回对象。 IActionResult 是一个接口,有很多实现,如 JsonResult、ViewResult、FileResult 等。

    【讨论】:

    • 你能用 IActionResult 返回(想象一下“Church-Lady”的声音)一个字符串吗?
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2018-12-07
    • 2012-09-02
    • 2011-10-05
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多