我有这个功能
[System.Web.Http.HttpGet]
[System.Web.Http.ActionName("StartProcess")]
public object StartProcess(string items)
{
//do stuff
}
试图用
打电话$.ajax({
url: '/api/Details/StartProcess',
type: 'get',
contentType: 'application/json',
data: items,
success: function() {
logger.log('Successful', "", "", true);
},
error: function(error) {
var jsonValue = jQuery.parseJSON(error.responseText);
});
继续收到404错误。我的其余调用工作,但这是我需要发送参数的第一个。
items只是逗号分隔的字符串。
这是我的路线信息。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id=Urlameter.Optional }
);
我缺少什么想法?
答案 0 :(得分:5)
您收到404错误,因为您的路由表无法解析网址“/ api / Details / StartProcess”
为了使WebAPI路由工作,你需要修改路由集合的“MapHttpRoute()”函数而不是“MapRoute()”
所以请更改下面的API路由(假设您使用的是默认api),它应该可以正常工作。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);
答案 1 :(得分:4)
Web API中的参数需要遵循路由配置中的参数。
在您的示例中,最简单的方法是将string items
更改为string id
。
另外,您可以将api/{controller}/{action}/{items}
添加到路线配置中。
答案 2 :(得分:2)
此外,如果您不想改变您的API路由配置(这会导致调用简单的Get和Put方法的轻微复杂性),您可以从
更改控制器操作注释[System.Web.Http.ActionName("StartProcess")]
到
[Route("StartProcess/{items}")]
此外,您需要使用以下命令注释您的控制器:
[RoutePrefix("api/details")]