【问题标题】:Web API POST not found (throws 404 on browser) but works on PostMan and Swagger未找到 Web API POST(在浏览器上抛出 404)但适用于 PostMan 和 Swagger
【发布时间】:2021-03-05 19:06:04
【问题描述】:

我的 Web API 在从 AJAX 调用时返回 404,但在 PostMan 和 Swagger 上运行良好。

发布方法

// POST api/<controller>
[HttpPost]
public int Post(string url, string RData, string aid, string AuthToken)
{
       //do something
}

jQuery AJAX 调用:

 function SaveData() {
            var $form = $("#formMain");
            var data = Serialize($form);
            var RData = JSON.stringify(data);
            var Url = window.location.href;
            var aid = "12332";
            //Get Auth Token

            $.ajax({
                url: "/api/Register/MyAPIKey", //Getting Auth Token first
                type: "GET",
                success: function (res) {
                    let AuthToken = res;
                    //After receiving Auth token, finally submit the registration data. This throws 404 error only on browser.
                    $.ajax({
                        type: "POST",
                        url: '/api/Register',
                        data: {
                            'url': Url,
                            'RData': RData,
                            'aid': aid,
                            'AuthToken': AuthToken
                        },
                        success: function (data) {
                            //Show success message
                        }
                    });
                }
            });
        }

我在浏览器控制台中得到的错误是:

Message: "No HTTP resource was found that matches the request URI 'http://localhost:54318/api/Register'."
MessageDetail: "No action was found on the controller 'Register' that matches the request."

邮递员屏幕截图:请注意-1 应作为响应,因为 API 方法中的某些其他验证不正确。但是我们现在可以忽略它,因为状态是200。

【问题讨论】:

  • 可以添加 Postman 请求的截图吗?
  • @HarshanaSerasinghe,请查看更新后的问题。
  • @Cyber​​pks 您可以尝试在邮递员的正文选项卡上传递 json 对象吗?似乎值是以您发送请求的方式作为查询参数传递的。
  • @BaldevBhattarai,我现在也可以在 PostMan 中看到同样的问题。这意味着在代码方面存在一些配置问题。尝试过 Swagger,它也将值作为 Querystring 传递。不知道出了什么问题。
  • @Cyber​​pks 我认为这是因为不支持的有效负载格式。尝试传递正确的 contentType 和/或 dataType 值和/或接受,希望能解决您的问题。

标签: javascript asp.net ajax asp.net-web-api2


【解决方案1】:

当我将 Post 方法中的各个参数替换为具有所有这些属性的对象时,问题得到了解决。

[HttpPost]
public int Post(PostData Reg)
{
   //do something
}

public class PostData
{
    public string url { get; set; } 
    public string RData { get; set; }
    public string aid { get; set; }
    public string AuthToken { get; set; }
}

最后将 ajax 方法中的 dataType 设置为 JSON。

dataType: "json"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2022-08-14
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多