具有多个参数的 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"...