具有多个参数的ApiController方法

时间:2016-08-03 17:37:41

标签: c# ajax http-get asp.net-apicontroller

目前尚不清楚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);
        }

3 个答案:

答案 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"...