无法使用javascript向ASP.NET web api Controller发送http POST请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用javascript向ASP.NET web api Controller发送http POST请求相关的知识,希望对你有一定的参考价值。

有一个node.js服务器,当客户端使用websocket与node.js服务器连接时,我将调用我的web api控制器。我使用socket.io将客户端与node.js服务器连接,然后node.js服务器向web api控制器发送xhr POST请求。但得到响应为“{”消息“:”没有找到与请求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请求时,这是有效的

答案

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

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

以上是关于无法使用javascript向ASP.NET web api Controller发送http POST请求的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core系列 58 IS4 基于浏览器的JavaScript客户端应用程序

ASP.NET 无法加载 CSS 和 Javascript 文件

无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动

asp.net c# javascript 控件集合无法修改,因为控件包含代码块(即<% ... %>)

JavaScript、asp.net 和 Sql Server

javascript 无法从 asp.net 更改简单的标签文本