c# - 如何在 MVC Controller 之外返回 StatusCode 对象

标签 c# asp.net asp.net-mvc asp.net-core actionresult

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

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

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

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

我是否有一种自然的方法来拾取此代码并将其移动到另一个类中以使其工作,或者我是否必须手工制作我自己的对象来表示我本来会在 Controller 中返回的对象,如果是的话, 推荐什么?

简而言之,理想情况下,我希望能够在 Controller 外部的类中返回诸如“return View("my view name", myModel) 之类的操作结果。 我怎样才能做到这一点?

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

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

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

最佳答案

您可以将它们替换为:

var result = new ObjectResult("Some message");
result.StatusCode = statusCode;
return result;

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

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

return new StatusCodeResult(500);

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

关于c# - 如何在 MVC Controller 之外返回 StatusCode 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795633/

相关文章:

c# - EF Code First 中的静态构造函数的使用

c# - 您能否在迭代期间在 LINQ 语句中实时设置/更新值?

jquery - 如何通过ajax调用在Web API中通过对象传递附加参数?

asp.net-mvc - 使用 mvc4 创建动态控件并仅对某些字段应用验证

asp.net-mvc - 为什么 DropDownListFor 无法识别我的编辑器模板中的选定值?

c# - 如何故意使所有 C# 单元测试失败

c# - UWP 值不能为空。参数名称 : path1

javascript - ASP.NET MVC 4 AJAX.BeginForm 和 PartialViews

ASP.NET 用户控件和 jQuery 对话框

c# - 单选按钮在回发时失去值(value)