异步控制器返回“System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult]”

时间:2015-05-11 11:32:53

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

我正在试图弄清楚为什么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]

2 个答案:

答案 0 :(得分:0)

你的web.config文件中有这个键吗?如果没有,请添加它,然后尝试。

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

答案 1 :(得分:0)

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

Home

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