我在我的MVC项目中编写了一个很好的控制器助手,它允许我在进行任何ajax请求时返回类似结构的结果负载。它看起来像这样:
public static JsonNetResult Responsify<T>(Func<T> func)
{
AjaxResponse response;
var result = new JsonNetResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
try
{
var resp = func();
response = AjaxResponse.SuccessResponse(resp);
result.Data = response;
}
catch (Exception e)
{
response = AjaxResponse.ErrorResponse(e.Message);
result.Data = response;
}
return result;
}
它的使用方式如下:
[HttpPost]
public JsonNetResult Link(LinkInstruction instruction)
{
return ControllerHelper.Responsify(() => _linkHandler.Link(instruction));
}
这里有一个问题,_linkHandler.Link
方法并不是异步的。
我想使用这种模式调用一些异步处理程序,但无法强制等待函数完成。我尝试使用Task.Factory.StartNew以及将lambda包装在async/await中,但还是无法解决问题。
async
在哪里?我没有看到。 - Yuval Itzchakovfunc
可以指向一个异步函数吗? - vcsjonesControllerHelper.Responsify(async () => await _linkHandler.LinKAsync(instruction));
但都没有成功。我还尝试过创建一个ResponsifyAsync方法,但不知道该如何处理它。 - Daniel Kempner