如何在 ASP.NET MVC/Web 控制器中返回 JSON?
Posted
技术标签:
【中文标题】如何在 ASP.NET MVC/Web 控制器中返回 JSON?【英文标题】:How to return JSON in a ASP.NET MVC/web controller? 【发布时间】:2017-05-18 01:13:56 【问题描述】:我的问题是我一直在关注 ASP.net MVC/API 教程,我在 MVC 方面有一个工作控制器。例如,这可以正常工作并在视图中返回我的数据:
public class DestinationController : Controller
private ebstestEntities db = new ebstestEntities();
// GET: Destination
public async Task<ActionResult> Index()
return View(await db.CI_DEST_ALL_VARIABLES.ToListAsync());
但是,当我查看以下示例时,我正在处理另一个项目,我似乎无法弄清楚如何更改它以适应我上面的项目控制器。
// GET: Destination
public async Task<ActionResult> IndexVM()
var model = new BeerIndexVM;
using (var db = new AngularDemoContext())
model.Beers = db.Beers.ToList();
return Json(model, JsonRequestBehavior.AllowGet);
【问题讨论】:
"我似乎不知道如何更改它以适应我上面的项目控制器。"如果您不描述问题,我们无能为力。 此外,Asp.Net MVC 与 Web API 不同且独立。它不是“ASP.Net MVC Web API”。我在问题中没有看到任何与 Web API 相关的代码。 我会删除最后一句话。要求场外资源是结束您的问题的理由 因此,在您的 DestinationController 中,您将返回View
,而在第二个示例中,您将返回 Json
。当您尝试返回 Json 而不是视图时会发生什么?
写一个总结问题的标题,how to ask question
【参考方案1】:
因为你的方法签名是async Task<ActionResult>
,你需要await
一个方法调用。 ToList()
的异步版本是 ToListAsync()
。因此,您只需使用前面的await
调用该方法,即可得到await db.Beers.ToListAsync()
。将该变量分配给您的模型,您应该是金牌。
完整方法:
// GET: Destination
[HttpGet]
public async Task<ActionResult> IndexVM()
var model = new BeerIndexVM();
using (var db = new AngularDemoContext())
model.Beers = await db.Beers.ToListAsync();
return Json(model, JsonRequestBehavior.AllowGet);
我还会在方法上添加一个 http 动词属性,尽管在这个特定的实例中它不是必需的。
【讨论】:
【参考方案2】:似乎缺少的一件事是您的“AcceptVerbs”注释。
[AcceptVerbs(HttpVerbs.Get)]
public async Task<ActionResult> MethodName()
return json(model, JSonRequestBehavior.AllowGet);
【讨论】:
以上是关于如何在 ASP.NET MVC/Web 控制器中返回 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC Web.Api 路由 - 真实世界示例
提交按钮未在 ASP.NET MVC Web 应用程序中触发
对控制器函数的多次调用会导致问题(ASP.NET MVC Web 应用程序中的 EF Core)
asp.net mvc web窗体文件中如何获取HttpContextBase对象