WebApi Controller动作共享相同的功能,例如分页和部分响应,是否可以创建一个基类来建模这些参数?
例如,这个URI:http://letsdoitclean.com/api/v1/athletes?clean=true&字段=名字,age&抵消= 0,限制= 25
可以映射到:
class AthletesController
{
IHttp Get(bool clean, string[] fields, int offset, int limit)
{
...
}
}
然而,fields
, offset
和limit
是经常使用的概念。所以我想要这样写:
abstract class ActionParameter
{
public string[] fields;
public int offset;
public int limit;
}
class AthletesGetParameter : ActionParameter
{
public bool clean;
}
class AthletesController
{
IHttp Get(AthletesGetParameter param)
{
...
}
}
我可以吗?
这也可以通过将其全局添加到WebApiConfig中来实现,这样您就不必在每个控制器动作中都标记它:
config.ParameterBindingRules.Insert(0, descriptor =>
typeof(ActionParameter).IsAssignableFrom(descriptor.ParameterType)
? new FromUriAttribute().GetBinding(descriptor)
: null);
是的,你绝对可以做到。ASP。如果您在本例中为复杂对象指定FromUriAttribute
,则NET将处理参数绑定:
public class AthletesController : ApiController
{
public string Get([FromUri] AthletesGetParameter athletesGetParam)
{
// ...
}
}
从你的问题中,我唯一会争论反对的是abstract class
的名称。它并没有很好地描述基类以及它的目的。可能是abstract class PaginationParameter
之类的东西。将其命名为ActionParameter
可能会使您(或其他程序员)在将来感到困惑,因为所有动作参数都应该派生这个类,我认为这是不对的。
可能是基类命名的细节,但回答你的直接问题…是的你可以。