具有多个参数的 ApiController 方法
ApiController method with multiple parameters
从这里看不清楚http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
如何在 ApiController 方法中使用多个参数以及 URL 是什么来调用它。有什么线索吗?
C#
[RoutePrefix("api/workorders")]
public class WorkOrdersController : ApiController
{
[Route("WorkOrdersByDates")]
[HttpGet]
public IEnumerable<WorkOrderItemView> GetWorkOrdersByDates(string startDate, string endDate)
{
var r = new List<WorkOrderItemView>();
//
return r;
}
}
AJAX
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: JSON.stringify({ startDate: "' + endDate + '", endDate: "' + endDate + '" }),
success: function (result) {
alert(result.Result);
}
});
Global.asax
protected void Application_Start()
{
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
不要将 ajax 调用方中的数据字符串化。这应该有效:
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: {
startDate: startDate.toISOString(),
endDate: endDate.toISOString()
},
success: function (result) {
alert(result.Result);
}
});
(另请注意,当控制器期望 DateTime
类型时,我在 JavaScript 日期值上使用 toISOString()
- 只要 JavaScript 对象,这就会提供一致的转换实际上是一个日期值 - 或者您可以将控制器类型保留为 string
并删除 toISOString()
,但我发现 ISO 转换非常有用)
您不应该对这些参数使用 JSON.stringify
,因为这会将字符串传递给 data
参数,只需给它原始对象本身并让 jQuery 转换它们到查询字符串。
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: { startDate: "' + endDate + '", endDate: "' + endDate + '" },
success: function (result) {
alert(result.Result);
}
});
你 Ajax 传递参数的方法抛出 "data" 参数,但是你的 api 使用 "HttpGet"。
要使用 "Get" 进行 ajax 调用的正确方法,您应该在 URL.
中传递参数
$.ajax(
{
url: "api/workorders/WorkOrdersByDates?startDate=" + startDate + "&endDate=" + endDate,
type: "GET"...
从这里看不清楚http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 如何在 ApiController 方法中使用多个参数以及 URL 是什么来调用它。有什么线索吗?
C#
[RoutePrefix("api/workorders")]
public class WorkOrdersController : ApiController
{
[Route("WorkOrdersByDates")]
[HttpGet]
public IEnumerable<WorkOrderItemView> GetWorkOrdersByDates(string startDate, string endDate)
{
var r = new List<WorkOrderItemView>();
//
return r;
}
}
AJAX
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: JSON.stringify({ startDate: "' + endDate + '", endDate: "' + endDate + '" }),
success: function (result) {
alert(result.Result);
}
});
Global.asax
protected void Application_Start()
{
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
不要将 ajax 调用方中的数据字符串化。这应该有效:
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: {
startDate: startDate.toISOString(),
endDate: endDate.toISOString()
},
success: function (result) {
alert(result.Result);
}
});
(另请注意,当控制器期望 DateTime
类型时,我在 JavaScript 日期值上使用 toISOString()
- 只要 JavaScript 对象,这就会提供一致的转换实际上是一个日期值 - 或者您可以将控制器类型保留为 string
并删除 toISOString()
,但我发现 ISO 转换非常有用)
您不应该对这些参数使用 JSON.stringify
,因为这会将字符串传递给 data
参数,只需给它原始对象本身并让 jQuery 转换它们到查询字符串。
var startDate = $('#StartDate').val();
var endDate = $('#EndDate').val();
$.ajax(
{
url: "api/workorders/WorkOrdersByDates",
type: "GET",
contentType: "application/json",
data: { startDate: "' + endDate + '", endDate: "' + endDate + '" },
success: function (result) {
alert(result.Result);
}
});
你 Ajax 传递参数的方法抛出 "data" 参数,但是你的 api 使用 "HttpGet"。 要使用 "Get" 进行 ajax 调用的正确方法,您应该在 URL.
中传递参数$.ajax(
{
url: "api/workorders/WorkOrdersByDates?startDate=" + startDate + "&endDate=" + endDate,
type: "GET"...