目前尚不清楚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);
}
答案 0 :(得分:1)
不要在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);
}
});
(另请注意,当控制器期望toISOString()
类型时,我在JavaScript日期值上使用DateTime
- 只要JavaScript对象实际上是日期值,这就会提供一致的转换 - 或者您可以离开您的控制器类型为string
并删除toISOString()
,但我发现ISO转换非常有用)
答案 1 :(得分:1)
你不应该将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);
}
});
答案 2 :(得分:-2)
你传递参数的Ajax方法抛出&#34;数据&#34; param,但是你的api正在使用&#34; HttpGet&#34;。 要使用&#34; Get&#34;来纠正进行ajax调用的方法你在网址中传递参数。
$.ajax(
{
url: "api/workorders/WorkOrdersByDates?startDate=" + startDate + "&endDate=" + endDate,
type: "GET"...