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

4 c# asp.net asp.net-mvc actionresult asp.net-core

我正在将 MVC 控制器重构为不同类中的更小的部分,并且已经到了返回“return StatusCode(500,"Some message")”项的部分。

据我所知,似乎我无法在控制器之外执行此操作。

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

我可以看到自己遇到的一个问题是,MVC 操作的原始类型是 IActionResult,因此在操作中我一直返回适当的响应,有时是 view(,model),有时是 Json(),有时是 StatusCode (<500>,),即我的回答不一致。

有没有一种自然的方法让我可以拾取这些代码并将其移动到另一个类中以使其工作,或者我是否必须手工制作自己的对象来表示我本来会在控制器中返回的内容,如果是这样,什么是受到推崇的?

简而言之,理想情况下,我希望能够在控制器外部的类中返回操作结果,例如“return View(”my view name”, myModel)。我怎样才能实现这一点?

感觉很脏,但也许是一个包含状态代码、消息、对象(用作模型)、视图名称和一个名为 ActionResultType 的新枚举的单个对象,其值为“StatusCode”、“Json”和“View”,因此,当控制器收到响应时,我可以相当轻松地将其映射回适当的自然状态。

也许我走得太远了,应该只专注于从控制器中获取逻辑的主要部分,而不是尝试在其他地方构建更充实的响应?

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

juu*_*nas 9

您可以将它们替换为:

var result = new ObjectResult("Some message");
result.StatusCode = statusCode;
return result;
Run Code Online (Sandbox Code Playgroud)

无论如何,这就是 StatusCode 辅助方法所做的事情。

如果您不需要该消息,那么您可以这样做:

return new StatusCodeResult(500);
Run Code Online (Sandbox Code Playgroud)

只需添加using Microsoft.AspNetCore.Mvc;到文件顶部即可。