【问题标题】:Async Controller Returning "System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]"异步控制器返回“System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]”
【发布时间】:2015-07-21 21:24:54
【问题描述】:

我试图弄清楚为什么 Umbraco 7.2.4 似乎无法在我的 ASP.NET MVC 控制器中处理异步任务。我觉得我已经阅读了几乎所有可能的堆栈溢出和 umbraco q&a,并尝试了许多可能的方法来缩小问题的范围。这适用于 Umbraco 7 & MVC 4 和 & MVC 5。它在没有 Umbraco 的 MVC 项目中工作得很好。

HomeController.cs:

using System.Threading.Tasks;
using System.Web.Mvc;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;

namespace Umbraco.Async.Website.Controllers
{
    public class HomeController : RenderMvcController
    {
        public new async Task<ActionResult> Index(RenderModel model)
        {
            var menuModel = new HomeViewModel(model);
            await Task.Delay(1000);
            return View("Home", menuModel);
        }
    }

    public class HomeViewModel : RenderModel
    {
        public string Test = "Pizza is awesome!!!!";

        public HomeViewModel(RenderModel model)
            : base(model.Content, model.CurrentCulture)
        {

        }
    }
}

Home.cshtml:

@*@inherits Umbraco.Web.Mvc.UmbracoTemplatePage*@
@inherits UmbracoViewPage<Umbraco.Async.Website.Controllers.HomeViewModel>
@{
    Layout = null;
}

<h1>@Model.Test</h1>

最后浏览器没有显示渲染视图,只有文本字符串:

System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]

【问题讨论】:

  • 在 SO stackoverflow.com/questions/23006976/… 的其他地方查看此问题
  • 嗨@ProNotion,谢谢你,我之前在多个项目(MVC4、MVC5)上尝试过这两种解决方案,但没有成功。我将对他们的问题添加评论。干杯!
  • ....我也尝试过使用 SurfaceController(如stackoverflow.com/questions/23006976/…)以及我的 RenderMvcController。 (可能有用的额外信息)
  • @legas:您是在 .NET 4.5 或更高版本上运行吗?

标签: asp.net asp.net-mvc async-await umbraco umbraco7


【解决方案1】:

我已经就这个问题向 Umbraco 提出了一个问题,因为我已经为此苦苦挣扎了很长一段时间。我已经写了an article on a solution here,但简而言之,您可以改用它:

public async Task<ActionResult> Home(RenderModel model)
{
    var menuModel = new HomeViewModel(model);
    await Task.Delay(1000);
    return View("Home", menuModel);
}

区别在于Home 操作优先于失败的索引操作,因为它是从模板名称而不是文档类型别名路由的。

【讨论】:

    【解决方案2】:

    您的 web.config 文件中是否有此密钥?如果没有,请添加后再尝试。

    <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
    

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2014-01-02
      • 2012-08-08
      相关资源
      最近更新 更多