【问题标题】:Unable to send a http POST request to ASP.NET web api Controller using javascript无法使用 javascript 向 ASP.NET Web api 控制器发送 http POST 请求
【发布时间】:2018-11-26 05:36:08
【问题描述】:

有一个 node.js 服务器,当客户端使用 websocket 与 node.js 服务器连接时,我将调用我的 web api 控制器。我使用 socket.io 将客户端与 node.js 服务器连接,然后 node.js 服务器向 web api 控制器发送一个 xhr POST 请求。但得到的回应是, "{"Message":"找不到与请求 URI 'http://localhost:4928/api/Player'匹配的 HTTP 资源。","MessageDetail":"在控制器 'Player' 上找不到与请求匹配的操作。"}"

Web API 方法

    public class PlayerController : ApiController
{
      public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    public string Post(string value)
    {
        return value;
    }
}

Node.js

 var app = require('express')();
var http = require('http').Server(app);
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
var querystring = require('querystring');
var io = require('socket.io')(http);
io.on('connection', function (socket) {
    console.log('A user connected ' + socket.handshake.address);
    PostRequest(socket.handshake.address);
    //Whenever someone disconnects this piece of code executed
    socket.on('disconnect', function () {
        console.log('A user disconnected ' + socket.handshake.address);
    });
});


function PostRequest(data) {

    var url = "http://localhost:4928/api/Player";
    var params = "value=" + data;/* querystring.stringify({ "value": data })*/
    xhr.open('POST', url, true);
    xhr.onreadystatechange = function () {//Call a function when the state changes.
        if (xhr.readyState == 4 && xhr.status == 200) {
            console.log(xhr.responseText);
        }
        console.log(xhr.responseText);

    }
    xhr.send(querystring.stringify({ value: "sss" }));

}


http.listen(3000, function () {
    console.log('listening on *:3000');
});

无论如何,当我调用 get 方法发送 xhr get 请求时,这是有效的

【问题讨论】:

  • 尝试将[HttpPost] 属性放在您的 Post 操作方法中。
  • @MohsinMehmood 结果是一样的。但是当我从 web api post 方法中删除参数并在不传递参数的情况下调用它时它正在工作。请帮忙

标签: javascript asp.net node.js asp.net-web-api xmlhttprequest


【解决方案1】:

您需要通知 Web API 以查找 parameter in the Request body,因为您不是通过查询字符串发送数据。尝试修改您的 Post 操作签名:

public string Post([FromBody]string value)
{
    ...
}

【讨论】:

  • 如果他在查询参数中传递值,那么 [FromUrl] 属性将在那里!
  • @OneManBand 现在 Post 方法在添加 [FromBody] 属性后调用。但是 Value 参数变空了。
  • 嗯。尝试使用 JSON.stringify() 而不是 querystring.stringify()。
猜你喜欢
  • 2016-05-12
  • 2013-02-06
  • 2017-12-11
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多