【问题标题】:Use XMLHttpRequest to post data tback to webserver with parameters使用 XMLHttpRequest 将数据发送回带有参数的 Web 服务器
【发布时间】:2014-01-31 05:32:57
【问题描述】:

如果我从 PostUser 方法中删除字符串参数,下面的代码可以找到。 但是当我添加 blob 时,它会失败并显示 404。我做错了什么?

控制器

public class LongPollController : ApiController
{
    public User PostUser(string blob)
    {
        var user = new User
        {
            Name = "John Smith",
            Age = 20,
        };

        return user;
    }
}

cshtml

<div id="message">Waiting....</div>

@section scripts {
<script>
    var data = new Object();
    data.blob = 'Hello World';

    var request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState == 4 && request.status == 200) {
            handleUser(JSON.parse(request.responseText));
        }
    };
    request.open("POST", "api/longpoll/user");
    request.setRequestHeader("Accept", "application/json");
    request.setRequestHeader('Content-Type', 'application/json');
    request.send(JSON.stringify(data));

    function handleUser(user) {
        var msg = document.getElementById('message');
        msg.innerHTML = 'Name: ' + user.Name + '<br />' +
            'Age: ' + user.Age + '<br />'
    }

</script>

将我的数据添加到 request.send() 以便 WebApi 获取它们的正确方法是什么?

【问题讨论】:

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


    【解决方案1】:

    Web api 与 asp.net mvc 控制器和 Web api 默认映射器有点不同。 1. 创建 c# 类来保存 web api 的输入

    public class JsData{
    public string Blob{get;set;}
    }
    

    2。改变

    public User PostUser(string blob)
    

    public User PostUser(JsData input) 
    

    在你的情况下它也可以运行,但是你需要修改 web.api 的路由

    【讨论】:

    • 但是如果我想把其他方法放在longpoll控制器上呢?
    • 我测试了你的建议更改,我仍然选择 404。
    • 它使用模型作为参数。我不必将 PostUser 更改为 Post 或更改请求 uri。默认情况下,WebApi 路由是 controller/{x}Action,其中 {x} 是方法(即 GET POST PUT DELETE)谢谢
    • 这对我有用,但如果我只想要一个纯字符串参数是可能的,发送一个字符串?还是我必须使用获取文档数据的 request.open() 的重载?
    • @user1515024 只需字符串,您可能可以在参数属性之前使用 [FromBody] 并且它应该映射
    猜你喜欢
    • 2020-04-13
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多