我正在将MVC控制器重构成不同类中的小块,我来到了一个部分,我正在返回“返回StatusCode(500,”Some message“)”item。
就我所知,似乎我无法在控制器之外做到这一点。
这是可能的,还是我必须找到另一种方法来返回响应,并将其转换为调用代码(MVC控制器)中的相应类型?
我可以看到自己遇到的一个问题是MVC动作的原始类型是IActionResult,所以在动作中我一直在返回任何适当的响应,有时是视图(,模型),有时是Json()和其他时候StatusCode(< 500>,),即我的回答不一致。
我是否有一种自然的方法可以将这些代码拾取并移动到另一个类中以使其工作,或者我是否必须手工制作我自己的对象以表示我将在控制器中返回的内容,如果是这样的话,建议什么?
简而言之,理想情况下,我希望能够在控制器外部的类中返回一个操作结果,例如“返回视图(”我的视图名称“,myModel)。 我怎样才能做到这一点?
感觉很脏,但也许是一个包含状态代码,消息,对象(用作模型),视图名称和名为ActionResultType的新枚举的对象,其值为“StatusCode”,“Json”和“查看“,因此当控制器收到响应时,我可以合理地轻松地将其映射回适当的自然状态。
也许我会走得有点远,而应该专注于将逻辑的主要部分从控制器中取出,而不是试图在其他地方建立一个更加充实的响应?
如果可能的话,我很乐意将每个动作结果大约10行,但除非我能找到一个很好的方法从其他地方返回适当的响应,否则可能会很困难。
答案 0 :(得分:1)
您可以将其替换为:
var result = new ObjectResult("Some message");
result.StatusCode = statusCode;
return result;
这就是StatusCode帮助器方法所做的事情。
如果您不需要该消息,则可以执行以下操作:
return new StatusCodeResult(500);
只需在文件顶部添加using Microsoft.AspNetCore.Mvc;
即可。
答案 1 :(得分:0)
如果您需要控制器之间的共享代码,您可以设置基本控制器来保存共享代码并在任何其他需要访问的控制器上继承该基本控制器。
ActionResult拥有你想要的所有东西。您在自定义对象中想要的所有内容都作为ActionResult的子类存在。 JsonResult是ActionResult的子类。每个错误代码都有几个子类。我相信HttpNotFoundResult是另一个。
我建议在控制器中保留大多数与ActionResult / Redirect / View / StatusCode相关的内容。这就是它通常所在的位置。