我有这样的场景
使用C#的ASP.net Web API项目 VS 2013 IIS Express 8.0托管在localhost上
我有3个控制器
Controller A提供HttpGet,controllerA(字符串id) 控制器B提供HttpPost,controllerB(字符串id) 控制器C提供HttpPost,controllerC(字符串id,双x)
只有第一个正在工作,而邮政请求总是返回404,任何人都知道什么是错的?是由于IIS上的安全设置?
代码如下
控制器代码
[HttpPost]
[ActionName("UpdatePosition")]
public string UpdateBus(string id)
{
return " request is received - post";
}
客户端函数调用
<script>
function sendPutRequest() {
$.ajax({
url: 'http://localhost:54284/api/bus/updatePosition/',
type: 'POST',
data: { id: 'test123' },
success: function (result) {
$('#output').append(result);
}
});
}
</script>
答案 0 :(得分:2)
默认情况下,Web API从URL中读取POST操作的原始参数值(int,bool,string等)。
在你的情况下,它可能找不到一个。因此它默认为无参数动作方法,但它找不到它。您正在请求正文中传递参数。解决这个问题:
使用参数的[FromBody]
属性。
public string UpdateBus([FromBody]string id)
如果您不想使用此属性,则另一个选项是在AJAX请求的查询字符串中发送参数。
url: 'http://localhost:54284/api/bus/updatePosition?id=' + 'test123'
请注意,参数只能使用一个[FromBody]属性。 如果您有多个基本参数,请尝试为所有这些参数创建一个类,并将该类作为参数。