WebApi控制器常用功能的动作参数基类



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, offsetlimit是经常使用的概念。所以我想要这样写:

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可能会使您(或其他程序员)在将来感到困惑,因为所有动作参数都应该派生这个类,我认为这是不对的。

可能是基类命名的细节,但回答你的直接问题…是的你可以

最新更新