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)
{
...
}
我有以下 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)
{
...
}