我试图用参数调用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 }
);
答案 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