我正在学习ASP.NET MVC4 Web API。 我想创建一个接收两个参数的新方法
[HttpPost]
public string MarkAsSeen(int objectID, long userID)
我想使用jquery:
来使用它$.ajax({
type: "POST",
url: "/api/tutorial/MarkAsSeen",
data: JSON.stringify({ objectID: _obj, profileID: _pid }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert(_tutorial + ' seen');
},async: true
});
我的路线配置方式
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}"
);
但它不起作用:
找不到与请求URI匹配的HTTP资源'http://local.dev.unation.com/api/tutorial/MarkAsSeen'.",MessageDetail":"在控制器'Tutorial'上找不到任何操作与请求匹配。
如果我将路径的模板更改为api / {controller} / {action} / {objectID} / {profileID},并使用jquery方法将此信息添加到url:/ api / tutorial / MarkAsSeen / + _obj + / + _pid 它有效。
我不想执行这些更改,因为:
你能告诉我我做错了吗?
TKS!
答案 0 :(得分:3)
Web.Api并不喜欢多个参数。最简单的解决方案是创建一个保存数据的新类型:
public class MarkAsSeenRequest
{
public int objectID { get; set; }
public int profileID { get; set; }
}
并在控制器操作中使用它:
[HttpPost]
public string MarkAsSeen(MarkAsSeenRequest request)
{
//...
}
它应该与原始路线一起正常工作:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}"
);
进一步阅读: