传递单个对象与传递多个参数WebAPI2

时间:2018-06-19 11:56:26

标签: c# asp.net-mvc asp.net-web-api2

我正在开发WepApi2,并在其中实现了高级搜索功能。我现在有三个选项。有10多个参数以及一些分页参数。

1)传递对象作为参数,它将具有所有必需的过滤器。

2)传递大约10-12个参数。

3)方法的扩展1.我将一个对象转换为查询字符串,然后将查询字符串转换回该对象。问题是我将没有默认的Get方法,该方法可以返回所有结果。但是,我可以检查查询字符串是否为null并调用该方法。

我应该选择哪个?在第一个中,由于HttpClient的Get请求不支持Body,我将不得不进行装箱和拆箱。

在第二个中,即使我在使用三层体系结构时添加了一个参数,我也必须将两个位置更改为三个。

第一种方法的代码

public class GeneralSearchViewModel
{
    public int RecordsPerPage { get; set; }
    public bool CalculateTotal { get; set; }
    public int CurrentPage { get; set; }
}
public class SomeAdvanceFilterClass : GeneralSearchViewModel
{
    public Guid Dummy { get; set; }
    public string DummyProperty2 { get; set; }
    public string DummyProperty3 { get; set; }
    public string DummyProperty4 { get; set; }
    public string DummyProperty5 { get; set; }
    public string DummyProperty6 { get; set; }
}
public class DummyController : ApiController
{
    public SearchResultModel<DummyModel> Get(SomeAdvanceFilterClass filter)
    {
        Logic logic = new Logic();
        return logic.GetResult(filters);
    }
}

不知道如何将其作为HttpClient调用。不支持带有正文参数的Get Request。即使由于缓存问题和其他原因,也不建议这样做。

第二种方法

public class DummyController : ApiController
{
    public SearchResultModel<DummyModel> Get(int RecordsPerPage,bool CalculateTotal,int CurrentPage,Guid Dummy,string DummyProperty2....)
    {
        Logic logic = new Logic();
        return logic.GetResult(RecordsPerPage,CalculateTotal,CurrentPage,Dummy...);
    }
}

这将需要对路由配置进行一些更改,或者我将需要使用默认参数。此外,更改一个参数需要在所有层进行更改

所有方法似乎都存在一些大问题。任何好的建议。我没有使用.NETCORE,所以不能在正文中使用Get请求。

1 个答案:

答案 0 :(得分:1)

您可以使用[FromUri]属性使用第一种方法。

public class DummyController : ApiController
{
   public SearchResultModel<DummyModel> Get([FromUri]SomeAdvanceFilterClass filter)
   {
     Logic logic = new Logic();
     return logic.GetResult(filters);
   }
}

在这种情况下,应将URI中的值映射到您的类。