2

我有这个功能

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

有什么我想念的想法吗?

4

3 回答 3

5

您收到 404 错误,因为您的路由表无法解析 url “/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 }
    );
于 2013-09-25T06:35:18.783 回答
4

Web API 中的参数需要跟在路由配置中的参数之后。

在您的示例中,最简单的方法是更改string items​​为string id.

或者,您可以添加api/{controller}/{action}/{items}到路由配置中。

于 2013-10-07T09:13:28.977 回答
2

此外,如果您不喜欢更改 API 路由配置(这会导致调用简单的 Get 和 Put 方法时出现轻微的并发症),您可以将控制器操作注释从

[System.Web.Http.ActionName("StartProcess")]

[Route("StartProcess/{items}")]

此外,您需要使用以下内容注释您的控制器:

[RoutePrefix("api/details")]
于 2015-09-26T09:46:48.340 回答