调用web API字符串参数

时间:2013-09-25 05:22:23

标签: ajax asp.net-mvc asp.net-web-api

我有这个功能

[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 }
);

我缺少什么想法?

3 个答案:

答案 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")]