我想通过AJAX向我的API提交表单帖子。我已经按如下方式设置了我的WebApiConfig.cs类以启用多个GET:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ApiById",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" }
);
以下是控制器操作:
[HttpPost]
[ActionName("ChangeStuff")]
public string ChangeStuff(int val1, int val2, int val3)
{
//Code
}
这就是我提出请求的地方:
var url = window.location.protocol + "//" + window.location.host + "/api" + "@Url.Action("ChangeStuff", "ApiControllerName")";
$.ajax({
url: url,
type: "POST", //Works with GET
data: { val1: val1, val2: val2, val3: val3 },
contentType: "application/json:; charset=utf-8",
dataType: "json",
success: function (msg) {
},
failure: function (msg) {
}
});
但是,我在发帖时收到此错误:
POST http://localhost:50627/api/ApiControllerName/ChangeStuff 404 (Not Found)
我认为这是因为我的API路由默认为GET请求然后无法接受POST类型(即使它在AJAX调用中显式化)的问题。它在制作GET请求时工作得很好。
编辑: 以下尝试都没有奏效:
data: JSON.stringify( { currentobject } )
data: { data: { currentobject } }
是否确保问题不在于修改的API路由?
答案 0 :(得分:2)
尝试使用您要传递的值定义对象,然后告诉您的API Post操作期望该对象而不是单个值的列表。
public class ApiPostModel
{
public int Val1 { get; set; }
public int Val2 { get; set; }
public int Val3 { get; set; }
}
然后在你的控制器中:
[HttpPost]
[ActionName("ChangeStuff")]
public string ChangeStuff(ApiPostModel model)
{
//Code
}
只要您在data{}
区块中传递的密钥的名称与属性名称相匹配,您就应该这样做。
或者将值作为查询字符串传递给控制器。