1

我今天看到了一件可怕而有趣的事情。请查看这个对 web api post 方法的 ajax 调用。

   $.ajax({
        url: 'api/AccountAPI/GetByNickName',
        type: 'POST',
        data: JSON.stringify({ ConnectedUserNickName: key }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        async: true,
        success: function (data) {
              alert('successful');
        },
        error: function (err) {
            alert('error');
        }
    });

出现错误:“加载资源失败:服务器响应状态为 405(不允许方法)”。此 ajax 调用不会命中服务器端的“GetByNickName”方法。

如果我将方法名称更改为“checkNickName”或任何其他名称,那么它可以正常工作。对我来说它看起来很有趣。谁能告诉这里发生了什么。

   $.ajax({
        url: 'api/AccountAPI/CheckNickName',
        type: 'POST',
        data: JSON.stringify({ ConnectedUserNickName: key }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        async: true,
        success: function (data) {
              alert('successful');
        },
        error: function (err) {
            alert('error');
        }
    });

当我注意到由于方法名称“GetByNickName”而发生错误时,我认为ajax post/get方法名称可能有一些智能。那么,真正的原因是什么??

4

1 回答 1

2

在 ASP.NET 中Web API framework,默认情况下将传入请求映射到基于请求的相应操作HTTP verb

因此,如果您指定GetByNickNamethis 对应于 HTTP Verb GET,其中 asCheckNickName不对应于任何 HTTP Verb,因此它适用于您的情况。

一个例子是假设你有一个动作AccountAPI

public void Get(int id)

你的 URI 看起来api/AccountAPI/{id}

有关更多详细信息,请阅读路由操作选择文档并查看示例应用程序

于 2013-09-14T07:12:04.940 回答