1

ASP.NET で MVC アプリケーションを構築しています。私の Index Controller では、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);

私は何を間違っていますか? 問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

記載されたエラーをスローするために使用したコードを示していただければ幸いです。しかし、非同期タスクが完了する前におそらくそれを行ったと仮定します。モデルで使用可能なフィールドがある限り

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 に割り当てようとするのと同じようになり、実行時例外が発生します。

于 2013-10-23T16:08:37.637 に答える