调用Web API方法

时间:2014-10-16 05:24:56

标签: jquery ajax asp.net-web-api-routing

我试图用参数调用DataByLocation,但是调用DataByLocation函数没有参数。我错过了什么吗?下面是代码。 提前谢谢。

Js代码

 getData:function(){
        var _data = {_location:'ABC'};
        $.ajax({
            type: "POST",
            contentType: "application/json",
            url: 'ABService/api/ABService/DataByLocation',
            data: JSON.stringify(_data),
            success: this.receivedData                
        });
    }

控制器代码

[HttpPost]
public string DataByLocation(string _location)
{
    return _location;
}
[HttpPost]
public string DataByLocation()
{

    return "no parameter";
}

配置代码

    RouteTable.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = System.Web.Http.RouteParameter.Optional }
        );

2 个答案:

答案 0 :(得分:1)

您的路线api/{controller}/{id}指定参数名称为" id"。

所以说你有一个像下面的Web Api控制器

public class AbcApiController : ApiController
{
    public Something Get(string searchTerm)
    {
        return ...;
    }
}

如果您尝试访问/api/AbcApi/get/hello,其中hello是您传递的搜索词。它不起作用,因为此路由将使用参数ID搜索Get操作。

相反,如果您不想改变路线,那么对您有用的是

/api/AbcApi/get?searchTerm=hello

另外如果您有兴趣了解有关网络API路由的更多信息,我建议您阅读此帖子 - Web Api Routing for multiple Get methods in ASP.NET MVC 4

答案 1 :(得分:0)

由于您尚未发布实际的班级名称,我假设这是TestController。牢记这一点,您可以使用以下URL进行webapi。假设,它托管在http://www.example.com`

如果您需要在没有id的情况下执行,那么网址将为。

http://www.example.com/api/Test/DataByLocation

如果使用id,则url将保持不变,但您需要将post对象作为JSON传递。

修改

由于控制器名称为ABService,虚拟目录为ABService

网址为http://www.example.com/ABService/api/ABService/DataByLocation

SOURCE