-->

必须ASP.NET MVC控制器方法返回的ActionResult?必须ASP.NET MVC控制器

2019-05-13 13:34发布

作为新的ASP.NET MVC,我一直都在怀疑的控制方法的签名。 在我见过的所有例子,他们似乎总是返回的ActionResult,即使他们实际上返回的ViewResult实例或相似。

这里有一个常见的例子:

public ActionResult Index()
{
    return this.View();
}

在这种情况下,是不是更有意义申报方法public ViewResult Index()并获得更强的类型的支持?

实验表明,这种工作的,因此它似乎可能。

我也知道可能存在多态性的应用场合(例如,如果你只想在某些情况下重定向,但显示在其他情况下的视图),但如果方法总是返回一个观点,我会找到一个更的ViewResult可取的。

在未来的兼容性方面,明显的ActionResult提供了更强大的签名,但如果一个人控制整个代码库,它总是可以将方法的签名更改为更一般的返回类型如果要在未来成为必要。

是,我是不知道的任何其他方面的考虑,或者我应该先走一步,具有特定的返回类型声明我控制器的方法呢?

Answer 1:

您可以完全使用特定的返回类型,即使在网络上的大多数例子似乎返回的ActionResult。 唯一的一次,我将返回的ActionResult类情况是,操作方法不同的路径返回不同的亚型。

史蒂芬·桑德森还建议在他的书中回到特定类型的临ASP.NET MVC框架 。 看看下面的报价:

“这个动作方法具体声明,它返回的ViewResult的一个实例。它的工作一样的,如果不是方法的返回类型为的ActionResult(所有行动结果的基类)。事实上,一些ASP.NET MVC编程申报其所有操作方法为返回一个非特异性的ActionResult,即使他们肯定知道,它总是会返回一个特定的子类。但是,它在面向对象编程一套行之有效的原则方法应返回最具体的类型,他们可以(以及接受他们可以在最一般的参数类型),按这一原则最大化方便和灵活的代码调用你的方法,比如单元测试“。



Answer 2:

总是返回最准确的类型,你可以退货。 所以,你应该返回的ViewResult时动作总是显示视图。 当你的ViewResult在某些情况下(无效发布的数据),或在其他情况下,返回RedirectToRouteResult我只会用的ActionResult。

随着一些先进actionfilter /执行情况的,你甚至可以返回什么都没有做的ActionResult完全不同的事情。



Answer 3:

[部分答案]:你并不总是返回的ActionResult,没有。 下面是一些其他结果的快速视图可以退货: http://msdn.microsoft.com/en-us/library/dd410269%28v=vs.98%29.aspx

也许这会帮助一点点。 祝好运!



Answer 4:

是的,你可以定义你的行动,如: public ViewResult Index() 但有时你的行动可以返回不同的结果(这是不宣而结果作为基础不可能ActionResult类)。 例如:

public ActionResult Show()
{
    ...

    if(Request.IsAjaxRequest())
    {
        return PartialView(...);
    }

    return View(...);
}

要么:

public ActionResult Show()
{
    ...

    try
    {
        ...
    }
    catch(Exception)
    {
        return RedirectToAction(...);
    }

    return View(...);
}


Answer 5:

的ActionResult是不同的返回类型的基类。 所以,你的行动必须为了工作返回从它派生一个ActionResult 或类 。 常见的是ViewResultJsonResult等。



Answer 6:

是的我有桑德森的书,我喜欢那部分大约是特定的,因为这是一件伤脑筋的我,当我在看其他的控制器操作的例子。 我的哲学甚至B4学习MVC是,由于函数(有返回值的方法),应被视为如果你声明一个变量/在上下文中替代为同类型的变量/ REF,要具体说明的类型,如您如果将声明VAR(认为它是想避免defnining所有的变量类型“对象”在一个应用程序 - 更强大的,但你失去了一些设计时检查和类型安全)。 有利于正确的返回类型的控制器单元测试为好。

有关参考,请查阅Listkov的替换原则也(中“实”“L”)。



文章来源: Must ASP.NET MVC Controller Methods Return ActionResult?