在我的asp.net项目中调用Webapi时出错

时间:2017-12-29 09:08:16

标签: javascript c# jquery asp.net-mvc asp.net-web-api

这是我的api代码,它在使用get方法

时返回成功的json数据
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"并使用空值记录保存在数据库中

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

如果您想使用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);
}

你有这些问题。

  1. 您的ajax电话错误content-type
  2. 数据未正确发布。
  3. 应使用
  4. val()代替.value
  5. API动作应使用[HttpPost]进行修饰。