在我的 asp.net 项目中调用 Web Api 时出错
Posted
技术标签:
【中文标题】在我的 asp.net 项目中调用 Web Api 时出错【英文标题】:Error while calling Webapi in my asp.net project 【发布时间】:2018-06-09 17:53:56 【问题描述】:这是我在使用 get 方法时成功返回 json 数据的 api 代码
public Question[] Get()
getQuestion obj = new AllDataAccess.getQuestion();
return obj.questionList().ToArray();
这是我接受值并保存在数据库中的 post 方法数据
public void Post([FromBody] string question)
SaveQuestion obj = new AllDataAccess.controller.SaveQuestion();
obj.savaData(question);
这是调用我的api的方法
$.ajax(
type: 'POST',
contentType: "application/json; charset=utf-8",
url: 'http://localhost:53893/api/values',
data: "'question':'" + $("#submit").value + "'",
dataType: 'json',
async: false,
success: function(data, status)
console.log(status);
,
error: function(err)
console.log(err);
);
现在的问题是,当我使用一个文本框值发布数据时,它会在控制台中给我一条消息“nocontent”并使用空值记录保存在数据库中
【问题讨论】:
不要这样构建 JSON。如果用户在文本字段中输入'
,他们会立即破坏它。
那么我如何保存我的值,因为它只显示空值
在JS端你应该使用JSON.stringify(model)
,在服务器端你需要定义一个模型而不是使用string with FromBody。
附带说明,async: false
已弃用,不应使用
【参考方案1】:
您的 ajax 网址似乎是错误的。您应该指定操作名称(post)
。此外,使用JSON.stringify
从 javascript 对象中检索正确的 json。
var postData = question:$("#submit").val() ;
$.ajax(
type: 'POST',
contentType: "application/json; charset=utf-8",
url: 'http://localhost:53893/api/values/post',
data: JSON.stringify(postData),
dataType: 'json',
success: function (data,status)
console.log(status);
,
error: function (err)
console.log(err);
);
在服务器端,你应该为Post
方法创建一个模型类;
public class PostInput
public string Question get; set;
然后Post
方法看起来像;
[HttpPost]
public void Post([FromBody]PostInput input)
SaveQuestion obj = new AllDataAccess.controller.SaveQuestion();
obj.savaData(question);
【讨论】:
而且他也在尝试使用[FromBody] string
而不是使用模型。
@vaibhav 也许您缺少模型上的[HttpPost]
方法?
@vaibhav,正如 john 所说,您应该在方法上添加 [HttpPost] 属性。
$("#submit").value
可能是undefined
顺便说一句...我猜OP想要$("#submit").val()
我将我的值错误更正为 val 并且我还定义了 [httpost] 但我仍然得到 405 的错误【参考方案2】:
如果你想使用FromBody
,你可以这样做。
JavaScript
$.ajax(
type: "POST",
//default content-type, could be omitted
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
url: 'http://localhost:53893/api/values/post',
data: '': $("#submit").val()
);
API 操作
[HttpPost]
public void Post([FromBody]string question)
SaveQuestion obj = new AllDataAccess.controller.SaveQuestion();
obj.savaData(question);
你有这些问题。
-
您的 ajax 调用错误
content-type
。
数据未正确发布。
应使用val()
而不是.value
。
API 操作应使用[HttpPost]
修饰。
【讨论】:
@Rainman: ***.com/a/12072419/17447这也是我理解的以上是关于在我的 asp.net 项目中调用 Web Api 时出错的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core Web API DELETE 调用返回 405
在 asp.net 5.0 web api 项目中访问中间件中的 TempData
通过 ASP.NET Web API 有效地使用 async/await
前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?