I have a WebAPI method that is returning a List<User>. This WebApi is used be several different applications and APIs, but we're attempting our first MVC app against it. I cannot get the grid to populate unless I add a ModelBinder to the WebAPI to return a DataSourceRequest. This seems rather counter-intuitive. It seems the best part of WebAPI is to accept & return generic JSON that anyone can then consume and use. But by adding the need for the DataSourceRequest, it's no longer a generic API, and will only work with Telerik. (a stretch since the result is just a JSON object with a Data[] holding the actual collection, but either way I just want to use regular ole JSON but still use the Telerik controls. What if I connect to someone elses API that just returns flat generic JSON?
So what can I do to keep my WebAPI generic, continue using JSON, and yet still have the MVC use the data in it's grid?
Here is the only way I was able to get it to work.
WebAPI Controller:
[HttpGet][ActionName("GetAllActiveUsers")][EnableCors("*", "*", "GET,POST,PUT,DELETE,OPTIONS")]public DataSourceResult GetAllActiveUsers([ModelBinder(typeof(DataSourceRequestModelBinder))] DataSourceRequest request){    List<User> allUsers = _manager.GetAllActiveUsers();    return allUsers.ToDataSourceResult(request);}
And here is the Grid/CSHTML Code:
@using Vensure.Dashboard.Data.DatabaseModels@{    ViewBag.Title = "Index";}@(Html.Kendo().Grid<User>()    .Name("ajaxGrid")    .Columns(cols =>    {        cols.Bound(c => c.UserId);        cols.Bound(c => c.FirstName);        cols.Bound(c => c.LastName);        cols.Bound(c => c.UserName);        cols.Bound(c => c.Email);    })    .Scrollable(s => s.Height("auto"))    .Sortable()    .Pageable(pageable => pageable        .Refresh(true)        .PageSizes(true)        .ButtonCount(5))    .Filterable(ftb => ftb.Mode(GridFilterMode.Row))    .AutoBind(false)    .DataSource(dataSource => dataSource        .Ajax()        .Read(r => r            .Type(HttpVerbs.Get)        )        .PageSize(20)        .ServerOperation(false)))<script>    $(function () {        var grid = $("#ajaxGrid").data("kendoGrid");        grid.dataSource.transport.options.read.beforeSend = function (xhr) {            xhr.setRequestHeader('X-Access-Token', getCookie('VensureToken'));        };        grid.dataSource.read();    });    function getCookie(name) {        var value = "; " + document.cookie;        var parts = value.split("; " + name + "=");        if (parts.length == 2) return parts.pop().split(";").shift();    }</script>
I tried different things, such s ServerOperation both true and false, etc...

