【发布时间】:2016-10-16 23:16:26
【问题描述】:
我有以下控制器:
public class ValuesController : ApiController
{
// POST api/values
public IHttpActionResult Post(string filterName)
{
return new JsonResult<string>(filterName, new JsonSerializerSettings(), Encoding.UTF8, this);
}
}
WebApi 配置
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
我用这个js代码来调用api
$.ajax(
{
url: "/api/values/",
type: "POST",
dataType: 'json',
data: { filterName: "Dirty Deeds" },
success: function (result) {
console.log(result);
},
error: function (xhr, status, p3, p4) {
var err = "Error " + " " + status + " " + p3;
if (xhr.responseText && xhr.responseText[0] == "{")
err = JSON.parse(xhr.responseText).message;
console.log(err);
}
});
我得到了一个不允许的 405 方法(发布)
【问题讨论】:
-
在 web api 方法中添加
[HttpPost]在您的评论下方。另外我认为 URL 是区分大小写的,在 javascript 中它可能应该读为Values,大写为V -
试过但同样的错误
-
此外,如果您通过 http 消息(而不是 url)发送数据,您应该将
[FromBody]添加到方法签名中。([FromBody] string filterName) -
您的控制器方法需要一个字符串,但您正在向它传递一个对象 { filterName: "Dirty Deeds" }。那是一个具有 filterName 属性的 javascript 对象。您的控制器不期望具有 filterName 属性的对象,而只是一个字符串。
-
当我使用 FromBody 时,参数 filterName 为空
标签: javascript c# asp.net-web-api asp.net-web-api2