ASP.NET Core 中用于 AngularJS API 请求的方法签名 JSON

Method signature in ASP.NET Core for AngularJS API request with JSON

我有以下 API 请求:

var answeredQuestions = {};
$scope.GetNextQuestion = function (question, value) {

    answeredQuestions[question] = value;
    var data = {
    };
    data["currentStep"] = $scope.currentStep;
    data["answeredQuestions"] = answeredQuestions;

    $http.post("/api/WizardAPI/GetNextQuestion", JSON.stringify(data))
        .then(function (data) {
            $scope.currentStep = data.data;
        }, OnError);
};

这是 API 控制器:

[HttpPost]
[Route("GetNextQuestion")]
public IActionResult GetNextQuestion([FromBody]string currentStep)
{
    return Ok("test");
}

但是,“currentstep”始终为空。 如果我将数据类型更改为对象,我会得到一些东西,所以 API 调用有效。 我尝试将其映射到自定义 class,但随后 API 调用失败。

这是class:

public class data
{
    public string CurrentStep { get; set; }
    public string[,] AnsweredQuestions { get; set; }
}

处理此问题的最佳方法是什么JSON?

请求负载

{"currentStep":"ERP","answeredQuestions":{"ERP":1}}

根据您的请求负载进行讨论,AnsweredQuestions 类型应为:Dictionary<string, dynamic>.

并且建议将 class 命名为 PascalCase 作为 C# 命名约定。

public class Data
{
    public string CurrentStep { get; set; }
    public Dictionary<string, dynamic> AnsweredQuestions { get; set; }
}

将您的 GetNextQuestion API 方法更改为:

[HttpPost]
[Route("GetNextQuestion")]
public IActionResult GetNextQuestion([FromBody] Data data)
{
    ...
}