Javascript 使用POST从ajax获取数据

Javascript 使用POST从ajax获取数据,javascript,c#,ajax,rest,Javascript,C#,Ajax,Rest,现在我被一个问题困住了。我想这是一件非常基本的事情。但是在做了几个小时的研究之后,如果有人能给我一个快速的建议,那就太好了。 因此,我试图从我的api(C#)调用我的PUT方法 当我按下按钮时,它被调用。按钮功能如下: <script> function sendData() { $.ajax({ url: '/api/values', type: 'POST', data: {'id':"100014"}, d

现在我被一个问题困住了。我想这是一件非常基本的事情。但是在做了几个小时的研究之后,如果有人能给我一个快速的建议,那就太好了。 因此,我试图从我的api(C#)调用我的PUT方法

当我按下按钮时,它被调用。按钮功能如下:

<script>
function sendData() {
    $.ajax({
        url: '/api/values',
        type: 'POST',
        data: {'id':"100014"},
        dataType: 'json',
        contentType: 'application/json',
    });
}

函数sendData(){
$.ajax({
url:“/api/values”,
键入:“POST”,
数据:{'id':“100014”},
数据类型:“json”,
contentType:'应用程序/json',
});
}

如果我调用GET方法,一切正常。但是尝试调用POST方法时,它只返回HTTP POST不支持该资源。 我和邮递员一起测试了这个方法。这里的Post方法有效。 但我不想将这些数据传递到Url中,而是从Ajax传递到数据中

如果有人能帮我,那就太好了

编辑: 我刚试过一些东西。我的最终结果是:

        [HttpPost]
    public async Task<IHttpActionResult> Post(int id)
    {
        var rawMessage = await Request.Content.ReadAsStringAsync();
        return Ok(rawMessage);
    }
[HttpPost]
公共异步任务发布(int-id)
{
var rawMessage=wait Request.Content.ReadAsStringAsync();
返回Ok(原始消息);
}

这对我来说很好

应该使用JSON.stringify()将JavaScript对象转换为字符串。 您可以像这样在脚本中修改您的方法

<script>
function sendData() {
var obj = { id:'100014'};
    $.ajax({
        url: '/api/values',
        type: 'POST',
        data: JSON.stringify(obj),
        dataType: 'json',
        contentType: 'application/json',
        success: function(data) {
            alert(data);
        }
    });
}
</script>

函数sendData(){
var obj={id:'100014'};
$.ajax({
url:“/api/values”,
键入:“POST”,
数据:JSON.stringify(obj),
数据类型:“json”,
contentType:'应用程序/json',
成功:功能(数据){
警报(数据);
}
});
}

顺便说一句,我看你的路线不对。应该是
/api/post

问题是找不到您的路线。 试一试

您甚至可以在控制器类之前添加:

[RoutePrefix("api/values")]
然后用你的名字来称呼它

url: '/api/values/getValues',

请检查是否引用了正确的库

如果您使用的是
System.Web.Mvc
,则可能会出现此问题。尝试删除它并引用
System.Web.Http


希望这能解决您的问题。

您应该使用
Ok()
方法包装输出。差不多

使用returm类型作为
IHttpActionResult

 [HttpPost]
    public IHttpActionResult Post(String id)
    {

        return Ok(id);
    }

数据会自动字符串化,问题与数据无关。如果OP使用GET而不是POST,它就会工作。@Archer我添加了JSON.stringify(obj)并且我的测试工作正常。我不明白你为什么否决我的答案???你不必为Ajax调用严格化数据。你需要在视图中显示更多信息。在控制器中,您需要保存更改。请尝试将处理程序的签名更改为此
publicstringpost([FromBody]stringid)
我不是C#背景,但我看到您正在尝试发送json数据并捕获字符串。允许吗?尝试只发送id值。如
数据:“100014”
。您可能还需要更改contentType和dataType。
dataType:'json',
删除此项,因为您不发送任何json。您可能会使用
数据类型:'text',
@Archer如果您错了。我做了一个测试,没有你的[FromBody],方法仍然被调用。不要只点击“下一步”按钮,随意选择其他答案。我的解决方案适用于我的测试。
url: '/api/values/getValues',
 [HttpPost]
    public IHttpActionResult Post(String id)
    {

        return Ok(id);
    }