我正在开发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请求。
答案 0 :(得分:1)
您可以使用[FromUri]属性使用第一种方法。
public class DummyController : ApiController
{
public SearchResultModel<DummyModel> Get([FromUri]SomeAdvanceFilterClass filter)
{
Logic logic = new Logic();
return logic.GetResult(filters);
}
}
在这种情况下,应将URI中的值映射到您的类。