【问题标题】:AJAX post request error 404AJAX 发布请求错误 404
【发布时间】:2018-02-08 17:21:06
【问题描述】:

我正在尝试从根目录中的 index.html 到我的控制器执行 AJAX 发布。但它在 Firefox 控制台中返回 404 Not Found。

index.html:

    <!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>

    <script>
        $.ajax(
            {
                url: "api/postData",
                type: "POST",
                dataType: 'json',
                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);
                }
            });
    </script>

</body>
</html>

我的控制器:

    namespace MyAPI.Controllers
{
    [Route("api/postData")]
    public class MyAPIController : ApiController
    {
        [HttpPost]
        public bool Post()
        {

            return true;
        }
    }
}

我需要在 RouteConfig.cs 中设置一些东西吗?

谢谢

【问题讨论】:

    标签: ajax asp.net-mvc


    【解决方案1】:

    更新您的 AJAX url 以包含该方法:

     url: "api/postData/Post"
    

    您也可以尝试更改:

     type: "POST" 
    

     method: "POST"
    

    【讨论】:

    • 还是同样的问题
    【解决方案2】:

    您的网址不正确。您指定的 url 指向控制器本身。而且,由于您没有默认的 index (GET) 方法,因此您必须为方法本身指定路由:

    namespace MyAPI.Controllers
    {
        [Route("api")]
        public class MyAPIController : ApiController
        {
            [HttpPost]
            [Route("postData")]
            public bool Post()
            {
    
                return true;
            }
        }
    }
    

    这将使您想要的网址成为您当前使用的网址。

    另一个选项是删除两条路线。那么你的网址就是myapi/post

    查看Documentation 了解更多信息和选项。

    【讨论】:

    • 我把控制器改成你说的那样,但还是返回 404 not found
    • 嗯,这很奇怪。您可以尝试将方法类型更改为 Action 或 Action result(而不是 bool)。这里有一些小东西,我看不到。另外 - 检查浏览器的网络选项卡。请求试图到达的 url 是什么?和你期待的一样吗
    • 是的……很奇怪。即使我输入 url localhost:64049/api/postData 它也会返回 HTTP 404。是因为我使用的是 ApiController 吗?
    • 您是否尝试更改方法类型? ApiController 与此无关
    • 是的,我换成ActionResult还是一样的问题
    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 2018-11-26
    • 2015-07-31
    • 1970-01-01
    • 2011-05-21
    • 2013-02-15
    • 2010-11-05
    • 2012-12-12
    相关资源
    最近更新 更多