在我的 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.stringifyjavascript 对象中检索正确的 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?

ASP.NET Core Web API 身份验证

在我的 ASP.NET Web API 中验证访问令牌