Asp.net web api 常见功能的WebApi控制器动作参数基类

Asp.net web api 常见功能的WebApi控制器动作参数基类,asp.net-web-api,Asp.net Web Api,如果WebApi控制器操作共享相同的功能,例如分页和部分响应,是否可以创建基类来建模这些参数 例如,此URI: 可能映射到: class AthletesController { IHttp Get(bool clean, string[] fields, int offset, int limit) { ... } } 但是,字段、偏移量和限制是经常使用的概念。所以我想要这样的东西: abstract class ActionParameter {

如果WebApi控制器操作共享相同的功能,例如分页和部分响应,是否可以创建基类来建模这些参数

例如,此URI:

可能映射到:

class AthletesController
{
    IHttp Get(bool clean, string[] fields, int offset, int 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)
    {
        ...
    }
}

我能做吗?

是的,你绝对能做。在本例中,如果您为复杂对象指定以下参数,ASP.NET将处理参数绑定:

public class AthletesController : ApiController
{
    public string Get([FromUri] AthletesGetParameter athletesGetParam)
    {
        // ...
    }
}
在你的问题中,我唯一反对的是
抽象类的名称。它并没有很好地描述基类以及它的用途。可能类似于
抽象类分页参数
或类似的内容。称之为
ActionParameter
可能会让您将来(或其他程序员)感到困惑,认为所有的动作参数都应该派生这个类,我认为这是不对的


也许是关于基类命名的细节,但要回答您的直接问题是的,您可以做到这一点

这也可以通过将其全局添加到您的WebApiConfig中来实现,这样您就不必在每个控制器操作中都对其进行标记:

config.ParameterBindingRules.Insert(0,描述符=>
typeof(ActionParameter).IsAssignableFrom(descriptor.ParameterType)
?新建FromUriaAttribute().GetBinding(描述符)
:空);

谢谢你的回答。命名没有考虑。试图提供一个例子。我同意你的反馈。@DavidOsborne啊,我也这么认为。很高兴能帮忙!