首页 > 解决方案 > .Net Core 从另一个控制器操作中获取 json 结果并将 json 字符串转换为 c# 对象

问题描述

我有一个控制器动作,它返回 JsonResult 如下:

[HttpPost]
    public ActionResult GetTotal(int AccountId)
    {
        Account account=context.Accounts.FirstOrDefault(s=>s.Id=AccountId);

        theTotal=account.Sum(s=>.Amount);

        return Json(theTotal);
    }

上述操作将 Total 返回到 Ajax 函数。但是,在少数情况下,我想在另一个控制器操作中获取总数以进行进一步计算,然后再调用操作中的返回视图。

我如何从上述动作中获取另一个控制器动作的 json 结果?提前致谢。

标签: jsonasp.net-corerazor

解决方案


创建一个公共服务以重用逻辑:

public class MyAccountService{
    private AppDbContext _context;

    public MyAccountService(AppDbContext context){
        this._context = context;
    }
    public int GetTotal(int AccountId){
        Account account=this._context.Accounts.FirstOrDefault(s=>s.Id=AccountId);
        return account.Sum(s=>s.Amount);
    }
} 

将其注册为范围服务。

services.AddDbContext<AppDbContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("AppDbContext")))
services.AddScoped<MyAccountService>();

并根据需要将此服务注入您的控制器中:

public class A1Controler :{

   private AccountService _accountService

   public A1Controller(MyAccountService accountService){
       this._accountService=accountService;
   }

   [HttpPost]
    public ActionResult GetTotal(int AccountId)
    {
        var theTotal=this._accountService.GetTotal(AccountId);

        return Json(theTotal);
    }
}

如果您有另一个A2Controller,只需进行相同的注射。


推荐阅读