c# - 如何使返回内容的简单异步操作方法返回实际内容而不是类型
问题描述
这是一个非常简单的 MVC 异步操作:
[HttpPost]
public async Task<ContentResult> Trial()
{
ContentResult contentResult = await new Task<ContentResult>(()=>new ContentResult{Content="Hi"});
return contentResult;
}
我希望此操作的帖子能够以“嗨”的内容进行响应。但事实并非如此。它以内容“System.Threading.Tasks.Task`1[System.Web.Mvc.ContentResult]”响应。
以下是完整回复:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
X-UA-Compatible: IE=Edge
Date: Mon, 23 Nov 2020 17:02:37 GMT
Content-Length: 166
System.Threading.Tasks.Task`1[System.Web.Mvc.ContentResult]
希望对使用异步函数的原因以及如何按预期获取内容“嗨”的一些见解。谢谢。
解决方案
如果您使用的是非常旧的 MVC 版本,则可能会发生这种情况。您必须(至少)在 .NET Framework 4.5 上运行 ASP.NET 4.5,才能使任务返回操作方法起作用。Microsoft.Bcl.Async
不适用于 ASP.NET 项目。
如果您的 Web 服务器上有 .NET Framework 4.5 或更高版本,则可以将项目升级到 ASP.NET 4.5。升级后,您必须关闭“怪癖模式”async
才能正常工作。我更喜欢通过设置httpRuntime.targetFramework
您的web.config
to4.5
(或您升级到的任何版本)来做到这一点。
推荐阅读
- c++ - c++ 如何通过特定的 n 个字符从 txt 文件中读取值
- lua - 使用 lua Hammerspoon 以表格格式插入文本
- android - 使用 Java 注释绑定库时出错
- javascript - 在这部分javascript中使用onclick的正确方法是什么?
- safari - 为浏览器渲染不同的图像格式
- android - 对齐文本视图以在工具栏图像视图下显示文本
- php - 遍历多维对象/数组
- android - 使用数据类解析 JSON 字符串
- apache-spark - 如何以火花流的方式设计它?
- swift - View-Based NSTableView does not display content of cells