如何在 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&lt;ActionResult&gt;,你需要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对象

了解 ASP.NET(MVC、Web API)中的令牌生成/验证

如何在单个 Microsoft ASP.NET MVC Web 应用程序中同时支持个人用户帐户和工作或学校帐户?