从Ajax请求找不到httpPost

时间:2018-02-07 23:37:10

标签: jquery asp.net ajax http-post

我的asp.net httpPost无法使用AJAX请求。

我的控制器:

[Route("api/sendData")]
public class TestController : ApiController
{
    [HttpPost]
    public bool Post(PostData data)
    {

        return true;
    }
}

我的帖子数据:

public class PostData
{
    public int Id { get; set; }
}

来自html文件的我的AJAX请求:

var data = {
        Id : 1
    };
    $.ajax(
        {
            url: "api/sendData",
            type: "POST",
            dataType: 'json',
            data: data,
            success: function (result) {
                console.debug(result);
                alert(result);
            },
            error: function (xhr, status, p3, p4) {
                console.debug(xhr);
                var err = "Error " + " " + status + " " + p3;
                if (xhr.responseText && xhr.responseText[0] == "{")
                    err = JSON.parse(xhr.responseText).message;
                alert(err);
            }
        });

我不知道为什么它会返回404 Not Found。有人知道我做错了吗?

由于

1 个答案:

答案 0 :(得分:1)

RouteAttribute应该应用于操作方法名称而不是控制器类,以便操作方法变为:

public class TestController : ApiController
{
    [HttpPost]
    [Route("api/sendData")]
    public bool Post(PostData data)
    {
        return true;
    }
}

如果要在控制器级别上使用属性路由,则应使用RoutePrefixAttribute代替。

此外,如果要在对象模型中传递属性,则需要使用JSON.stringify并设置contentType: "application/json",因为您要将JSON对象发送到操作方法:

<script>
    var data = { Id: 1, 
                 // other properties 
               };
    $.ajax({
        url: "api/sendData",
        type: "POST",
        contentType: "application/json",
        dataType: 'json',
        data: JSON.stringify(data),
        success: function (result) {
            console.debug(result);
            alert(result);
        },
        error: function (xhr, status, p3, p4) {
            // error handling here
        }
    });
</script>