繁体   English   中英

在将数据发送到View之前,附加到ASP.NET中MVC控制器中的Json对象

[英]Append to a Json object in MVC controller in ASP.NET before sending data to the View

我正在ASP.NET中构建MVC应用程序。 在我的索引控制器中,我正在调用一个API,获取数据并将其传递给视图。 这可以很好地工作,并且我可以毫无问题地在视图中恢复数据。

public ActionResult Index()
{
    Base model = null;
    var client = new HttpClient();
    var task =
    client.GetAsync(
    "http://example.api.com/users/john/profile")
    .ContinueWith((taskwithresponse) =>
    {
        var response = taskwithresponse.Result;
        var readtask = response.Content.ReadAsAsync<Base>();
        readtask.Wait();
        model = readtask.Result;

    });
    task.Wait();

    return View(model);
}

我的模特如下:

public class Base
{
    public Data data { get; set; }
}

public class Data
{
    public Profile profile { get; set; }
    public Credit credit { get; set; }
}

public class Profile
{
    public String firstname { get; set; }
    public String lastname { get; set; }
}

public class Credit
{
    public int amount { get; set; }

    public string balance { get; set; }

}

API以以下格式返回数据:

{

"data": {
    "profile": {
        "firstname": "John,
        "lastname": "Newman",
    },
    "credit": {
        "amount": 30,
    "neverbought" : false
    }
}
}

我现在想要实现的是向返回的数据添加更多属性。 例如,我想将状态属性添加到功劳中,这将根据金额和未购买属性来计算。 但是现在,让我们说credit.state将始终为“ lowCredit”。

所以我要做的就是添加Credit.state =“ neverBought”; 在将数据发送到视图之前,先将其发送到我的控制器。 然后我得到了一些错误,我的Credit类没有包含状态的定义。 我将状态属性添加到我的信用模型中,但是随后我得到“非静态字段,方法或属性需要对象引用。

这是我使用的代码:

task.Wait();
model.credit.state = "lowCredit"; 
return View(model);

我做错了什么,应该怎么解决?

如果您显示了用来引发所述错误的代码,那将是很好的。 但是我要假设您可能是在异步任务完成之前完成的。 只要您的模型中有可用字段

public class Credit
{
 public int amount { get; set; }
 public string state { get; set; }
 public string balance { get; set; }
}

那么您应该可以对其进行设置( 等到异步完成

task.Wait();
model.data.credit.state = "lowCredit";
return View(model);

尝试在任务完成之前分配此值就像尝试将值分配为null并会导致​​运行时异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM