- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
"或仅返回 "SomeObject"有什么区别?-6ren"> "或仅返回 "SomeObject"有什么区别?-考虑 ASP.NET Core Web API Controller 方法的以下方法签名: public JsonResult GetById(string id); public async Tas-6ren">
考虑 ASP.NET Core Web API Controller 方法的以下方法签名:
public JsonResult GetById(string id);
public async Task<SomeObject> GetById(string id);
public SomeObject GetById(string id)
在默认设置中,所有返回一个 JSON 表示 SomeObject
给客户。框架是否以不同方式对待它们?如果是,应该在什么时候使用哪一种?
例如,大多数文档建议使用 IActionResult
的实现由辅助函数生成,例如 OK()
.然而,所有这些似乎都为你做的是设置 StatusCode,它们的缺点是混淆了你的方法返回的内容——实际上你可以在不同的情况下返回不同的类型,我认为这是一个糟糕的主意。一个链式 react 是像 Swagger 这样的工具无法预测该方法将返回什么。
所以我宁愿返回SomeObject
:
Task<SomeObject>
- 它总是有用的,还是仅当方法使用异步调用时有用?编辑: 尝试澄清 - 所有签名都返回 SomeObject
的 JSON 表示形式到客户端,但从 C# 的角度来看,它们具有不同的返回类型,因此 MVC 框架正在做一些工作来转换它们。
哪个是最佳实践,为什么?有充分的理由返回吗 JsonResult
而不是返回 SomeObject
?应该返回 Task<SomeObject>
总是被使用,还是仅当操作中包含异步代码时才有值(value)(我假设)?
最佳答案
您要搜索的是 ASP.NET Core 中的 formatters
及其工作原理。来自官方文档:
An action isn’t required to return any particular type; MVC supports any object return value. If an action returns an IActionResult implementation and the controller inherits from Controller, developers have many helper methods corresponding to many of the choices. Results from actions that return objects that are not IActionResult types will be serialized using the appropriate IOutputFormatter implementation.
您还需要阅读有关内容协商
的内容:
Content negotiation only takes place if an Accept header appears in the request. When a request contains an accept header, the framework will enumerate the media types in the accept header in preference order and will try to find a formatter that can produce a response in one of the formats specified by the accept header. In case no formatter is found that can satisfy the client’s request, the framework will try to find the first formatter that can produce a response (unless the developer has configured the option on MvcOptions to return 406 Not Acceptable instead).
最后在 JsonResult
范围内使用:
Actions can return specific results that are always formatted in a particular manner. For example, returning a JsonResult will return JSON-formatted data, regardless of client preferences.
阅读更多 Formatting Response Data部分。
关于c# - 在 Asp.net Core Web API 中返回 "JsonResult/IActionResult"或 "Task<SomeObject>"或仅返回 "SomeObject"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273524/
我已经在 Controller 上设置了这个测试方法,以消除它的任何复杂性。基于我从搜索中发现的所有结果,这应该有效。我不确定我在这里遗漏了什么。 public JsonResult test() {
据我所知,我收到解析器错误,因为我返回的某些数据包含撇号。 我收到错误: SyntaxError: Unexpected end of input at Object.parse (native) a
我在 Controller 中使用以下操作,并且尝试在 jq.grid 中显示房间数量; public JsonResult Incercare() { DBContext
我需要像这样从我的 ASP.NET MVC 3 应用程序返回一个 JSON 结果: { 0: value1, 1: value2 } 但是我不能创建一个匿名类型的对象,它将数字作为字段名称。那我该怎么
我对此还是新手,所以我会尝试解释我在做什么。基本上我想要的是根据前一个下拉列表的值加载一个下拉列表,并且我希望它加载数据并在另一个列表更改时出现。这是我在 Controller 中编写的代码: pub
试图显示来自 Controller 的成功消息? [HttpPost] public JsonResult SuccesMsg() { return Json(ne
我正在尝试构建一个 Web 服务来与需要安全连接的移动应用程序进行交互。 通过不安全的连接,我从服务器获得了所需的 JSON 结果,并可以构建适当的 JSON 对象(在测试设备上)。 所需的 JSON
我使用的是 MVC 3 并且有一个操作返回具有 187 个名称值对的 JsonResult(作为 List ),但是从 ajax 调用接收到的数据通常被截断并且无法解析。 这总是通过 JsonResu
在我的客户端,我有一个如下所示的 ajax 调用: $.ajax({ url: "Controller/ListResult",
我如何在 C# asp.net MVC 中返回 json 结果中的字符串列表? 我有这个 Controller public JsonResult AutoCompletePart(string
我试图在我的一个 Controller 中对返回 JsonResult 的方法进行单元测试。令我惊讶的是,以下代码不起作用: [HttpPost] public JsonResult Test() {
我有一个运行良好的 JsonResult,并从一些 POCO 返回 JSON。我想将 JSON 作为字符串保存在数据库中。 public JsonResult GetJSON() { Json
我有应该返回 json 字符串的 MVC Controller 方法。 public JsonResult myMethod() { .... return Json(new { succes
在我的 HomeController 中,我有以下方法: public JsonResult AjaxTest(Position postData) { Session["lat"]
尝试构建一个 mvc 项目,它将上传的图像从数据库加载到轮播中。我遇到的问题是,图像将创建一个 byte[] 列表并作为 JsonResult 从 Controller 发送到 View 。问题是我不
以下查询成功运行。 var tabs = ( from r in db.TabMasters orderby r.colID
我创建了一个 ActionFilterAttribute,用于在允许处理 MVC Controller get/post 请求之前验证帐户是否可用于处理。如果该帐户不可用,我想向客户返回错误。如果请求
我对此已经摸不着头脑有一段时间了,并决定让 SO 社区尝试一下...... 我有一些操作可以响应客户端的 POST,执行简单的任务并返回 JsonResult如果成功,则从具有简单 bool “成功”
使用此脚本,我从 JsonResult (GetDevicesTable) 获取数据并将它们放入表中 ( id="OrderDevices") $(document).ready(function
我正在尝试使用 jquery.Ajax 将数据发布到返回 JsonResult 的 ASP.NET MVC2 操作方法。一切都很好,除了当响应返回浏览器时,它被视为文件下载而不是传递到成功处理程序中。
我是一名优秀的程序员,十分优秀!