C# Web API 2 POST请求返回null
问题是,当输入方法时,“session”是空的。如您所见,标头和JSON对象是正确的。你能告诉我我做错了什么吗 我的发帖请求带有角度:C# Web API 2 POST请求返回null,c#,angularjs,asp.net-web-api2,C#,Angularjs,Asp.net Web Api2,问题是,当输入方法时,“session”是空的。如您所见,标头和JSON对象是正确的。你能告诉我我做错了什么吗 我的发帖请求带有角度: $scope.send = function () { var data = { "session": session }; var req = { method: 'POST', data: data, headers: {'Content-
$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();
});
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] string session) {
...
}
和C#代码:
$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();
});
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] string session) {
...
}
Chrome控制台:
$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();
});
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] string session) {
...
}
请求URL:http://localhost:39634/api/myquiz/answers/
请求头
显示临时标题
接受:application/json、text/plain、*/*
内容类型:application/json
来源:http://localhost:39634
推荐人:http://localhost:39634/Team/Index
用户代理:Mozilla/5.0(Windows NT 6.3;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/40.0.2214.93 Safari/537.36
请求有效载荷
{会议:“92DFB7E43224702A553C98C294B29CF”}
会话:“92DFB7E43224702A553C98C294B29CF”
根据Web API,尝试直接发送会话(原始json字符串),而不是将其放入字典(json对象)
您正在向WebApi发布对象:
var data = { "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#对象来传递给控制器。像这样:
public class AnswerPost
{
public string Session {get; set;}
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] AnswerPost answerpost) {
...
}
public class ParamClass
{
public string session { get; set; } // Note: it's case.sensitive
}
然后将控制器方法更新为如下所示:
public class AnswerPost
{
public string Session {get; set;}
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] AnswerPost answerpost) {
...
}
public class ParamClass
{
public string session { get; set; } // Note: it's case.sensitive
}
Web API操作需要与参数类型匹配的值才能反序列化主体 因此,如果Web API参数是值类型,如
字符串会话
,则必须发布单个值,例如“我的字符串”
,而无需额外包装
如果您的Web API参数是一个复杂的参数,例如一个具有属性的类,那么您必须发布一个JSON对象,就像您在问题中所做的那样
也就是说,您的参数应该是这样一个类的对象:
public class AnswerPost
{
public string Session {get; set;}
}
[Route("answers")]
[HttpPost]
public IActionResult AnswerPost([FromBody] AnswerPost answerpost) {
...
}
public class ParamClass
{
public string session { get; set; } // Note: it's case.sensitive
}
这有帮助吗?请尝试按以下方式定义数据
var data={'':session}
。您可以阅读更多“会话”变量来自哪里?thanx很多,这很有效!但如果只有一个参数,它就可以工作。按照这种方式,您可以尝试转换JSON对象:类似于数据:“\'”+data+“\'”
。然后在WebAPI方法中得到[object object]。@shevchenko.ch Yes这只在您有一个参数时有效,因为您只能从表单体检索一个基本类型值。如果你能给它一个投票权,那就太好了。我会这样做,但没有足够的声誉(这个解决方案帮助了我。当你的api控制器接受一个字符串参数时,用“
将确保它工作。但这仅适用于一个字符串参数的情况。非常感谢,如果您有多个参数,这是最好的解决方案。