C# 如何在MVC控制器外部返回StatusCode对象

C# 如何在MVC控制器外部返回StatusCode对象,c#,asp.net,asp.net-mvc,asp.net-core,actionresult,C#,Asp.net,Asp.net Mvc,Asp.net Core,Actionresult,我正在将一个MVC控制器重构为不同类中的较小部分,在这里我将返回一个“return StatusCode(500,“Some message”)”项 就我所知,似乎我无法在控制器之外完成这项工作 这是可能的,还是我必须找到一种替代方法来返回响应,并将其转换回调用代码中的适当类型(MVC控制器) 我发现自己有一个问题,MVC操作的原始类型是IActionResult,因此在该操作中,我一直在返回适当的响应,有时返回视图(,模型),有时返回Json(),有时返回状态代码(,),即我的响应不一致 有没

我正在将一个MVC控制器重构为不同类中的较小部分,在这里我将返回一个“return StatusCode(500,“Some message”)”项

就我所知,似乎我无法在控制器之外完成这项工作

这是可能的,还是我必须找到一种替代方法来返回响应,并将其转换回调用代码中的适当类型(MVC控制器)

我发现自己有一个问题,MVC操作的原始类型是IActionResult,因此在该操作中,我一直在返回适当的响应,有时返回视图(,模型),有时返回Json(),有时返回状态代码(,),即我的响应不一致

有没有一种自然的方法可以让我把这些代码移到另一个类中使其工作,或者我必须手工制作我自己的对象来表示我将在控制器中返回的内容,如果有,建议是什么

简言之,理想情况下,我希望能够在控制器之外的类中返回操作结果,例如“returnview”(“我的视图名”,myModel)。 我怎样才能做到这一点

它感觉很脏,但可能是一个包含状态码、消息、对象(用作模型)、视图名称和名为ActionResultType的新枚举的单个对象,其中包含“statuscode”、“Json”和“view”的值,因此当控制器接收到响应时,我可以很容易地将其映射回相应的自然状态

也许我走得有点远了,相反,我应该专注于从控制器中获取逻辑的主要部分,而不是尝试在其他地方构建更具体的响应


如果可能的话,我希望每个操作的结果都能达到10行左右,但除非我能找到一种从其他地方返回适当响应的好方法,否则这可能会很困难。

如果您需要控制器之间的共享代码,您可以设置一个基本控制器来保存共享代码并在任何其他控制器上继承该基本控制器需要访问的控制器

ActionResult包含您想要的所有内容。您在自定义对象中想要的所有内容都作为ActionResult的子类存在。JsonResult是ActionResult的子类。每个错误代码都有几个子类。我相信HttpNotFoundResult是另一个


我建议将大多数与ActionResult/Redirect/View/StatusCode相关的内容保存在控制器中。这是它通常所在的位置。

您可以用它们代替:

var result = new ObjectResult("Some message");
result.StatusCode = statusCode;
return result;
这就是StatusCode助手方法的作用

如果您不需要该消息,则可以只执行以下操作:

return new StatusCodeResult(500);

只需使用Microsoft.AspNetCore.Mvc;在文件顶部添加

控制器外部的逻辑不应该知道或关心HTTP错误代码,请将这些内容保留在Mvc操作中。所有这些操作都有基本类型的ActionResult,因此我不确定问题出在哪里。您可以尝试使用“return InternalServerError(新异常(“一些自定义消息”);“@ErikPhilips在花了更多的时间之后(用一双休息良好的眼睛),你不明白问题是什么并不奇怪。当我应该使用新的StatusCodeResult()时,我在控制器外使用StatusCode()(得到一个红色的波形),这让我很愚蠢!(我想咖啡不够)。我似乎无法填充ViewResult的模型(现在开始觉得我违背了规则),所以我想我将使用某种对象来确定状态,并在控制器中将其映射到适当的IActionResult类型。