我今天看到了一件可怕而又有趣的事情。请看一下这个关于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方法名称中可能存在一些情报。那么,究竟是什么原因?
答案 0 :(得分:1)
在ASP.NET中,默认情况下Web API framework
会根据请求的HTTP verb
将传入请求映射到相应的操作。
因此,如果您指定GetByNickName
,则此对应于HTTP动词GET
,其中CheckNickName
与任何HTTP动词不对应,因此它适用于您的情况。
一个例子是假设你在AccountAPI
public void Get(int id)
您的URI看起来像api/AccountAPI/{id}
有关详细信息,请参阅routing和action selection文档并查看sample application