Skip to main content
 首页 » 编程设计

c#之Web API 2 POST 请求返回 null

2024年06月20日45rubylouvre

问题是,当进入方法时,“session”为空。如您所见, header 和​​ JSON 对象是正确的。你能告诉我我做错了什么吗?

我的带 Angular 的 POST 请求:

        $scope.send = function () { 
        var data = { "session": session }; 
        var req = { 
            method: 'POST', 
            data: data, 
            headers: {'Content-Type': 'application/json'}, 
            url: '/api/myquiz/answers/' 
        } 
 
        $http(req).success( 
            function () { 
                quiz(); 
            }); 
    } 

和C#代码:

    [Route("answers")] 
    [HttpPost] 
    public IActionResult AnswerPost([FromBody] string session) { 
 
       ... 
 
    } 

Chrome 控制台:

Request URL:http://localhost:39634/api/myquiz/answers/ 
Request Headers 
Provisional headers are shown 
Accept:application/json, text/plain, */* 
Content-Type:application/json 
Origin:http://localhost:39634 
Referer:http://localhost:39634/Team/Index 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36 
Request Payload 
{session: "92dfb7e432224702a553c98c294b29cf"} 
session: "92dfb7e432224702a553c98c294b29cf"

请您参考如下方法:

您正在向 WebApi 发布一个对象:

var data = { "session": session }; 

这就是说您正在传递一个具有 session 属性的对象。你告诉你的 WebApi 方法期望的是一个字符串:

public IActionResult AnswerPost([FromBody] string session) 

不是一个对象。 我认为如果您将代码更改为:

$scope.send = function () { 
        //var data = { "session": session }; 
        var req = { 
            method: 'POST', 
            data: session, 
            headers: {'Content-Type': 'application/json'}, 
            url: '/api/myquiz/answers/' 
        } 
 
        $http(req).success( 
            function () { 
                quiz(); 
            }); 
    } 

它应该可以工作。希望这可以帮助。不过,如果您将来要将更多参数传递给该函数,我会创建一个 C# 对象以传递给 Controller ​​。像这样:

public class AnswerPost 
{ 
  public string Session {get; set;} 
} 

然后将 Controller 方法更新为如下所示:

[Route("answers")] 
    [HttpPost] 
    public IActionResult AnswerPost([FromBody] AnswerPost answerpost) { 
... 
}