手动react-table onFetchData到net-core API Controller

时间:2018-03-02 22:44:07

标签: asp.net-core-mvc asp.net-apicontroller react-table

我正在使用带有网络核心API控制器的react-table,并且在抓取“已排序”和“已过滤”字段方面遇到了一些麻烦。

我正在发送“onFetchData”方法中的字段,如下所示:

Axios.get('/api/Dashboard/GetGiftCards', {
    params: {
        page: state.page,
        pageSize: state.pageSize,
        sorted: state.sorted,
        filtered: state.filtered
    }
})

发送的查询字符串包含例如3种类型的排序和3种过滤器,如下所示:

http://localhost:64963/api/Dashboard/GetGiftCards?page=0&pageSize=10&sorted[]=%7B%22id%22:%22giftCardType%22,%22desc%22:false%7D&sorted[]=%7B%22id%22:%22membershipId%22,%22desc%22:false%7D&sorted[]=%7B%22id%22:%22createdDate%22,%22desc%22:false%7D&filtered[]=%7B%22id%22:%22imisId%22,%22value%22:%223%22%7D&filtered[]=%7B%22id%22:%22giftCardType%22,%22value%22:%22E%22%7D

服务器端,我的控制器设置如下:

[HttpGet("GetGiftCards")]
public async Task<IActionResult> GetCardsAsync([FromQuery] GetGiftCardsRequest request)

我的任何请求对象如下

public class GetGiftCardsRequest
{
    [JsonProperty(PropertyName = "page")]
    public int Page { get; set; }

    [JsonProperty(PropertyName = "pageSize")]
    public int PageSize { get; set; }

    [JsonProperty(PropertyName = "sorted")]
    public IEnumerable<string> sorted { get; set; }

    [JsonProperty(PropertyName = "filtered")]
    public string[] Filters { get; set; }

    public class Sorting
    {
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }

        [JsonProperty(PropertyName = "desc")]
        public bool Descending { get; set; }
    }

    // Filtering object not created yet
}

我很难让控制器使用URL,但到目前为止我还没有在网上找到任何东西。我想我应该只使用Regex构建我自己的自定义过滤器,但我想我会先在这里发帖,看看是否有其他人提出了解决方案?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。我决定手动读取查询字符串并将期望值放在请求对象中。

以下是该属性在我的方法上的显示方式

 https://localhost/home

参数是来自react-table的“已排序”对象列表,来自react-table的“过滤”对象列表,以及我们要填充的ActionArgument的名称。

以下是属性的代码:

[HttpGet("GetGiftCards")]
[ReactTableFilter("sorted", "filtered", "request")]
public async Task<IActionResult> GetGiftCardsAsync([FromQuery] GetGiftCardsRequest request)

我意识到这可以清理很多,使其更抽象。如果我回过头来,我会粘贴更新的代码。