.Net Web API控制器,根据“GetFor”使用不同的方法

时间:2013-11-19 13:39:31

标签: asp.net-web-api

我正在使用.net编写web api,我怀疑这是否是创建控制器的正确方法。问题是我有两个不同的协议文件要加载两种不同的项目。我正在考虑将它们放在同一个控制器中并在其中创建两种不同的方法。我们说

[Route("visit/{visitId}/agreements/explanation")]
public Agreement GetVisitAgreement()
{
    return ...
}

[Route("viewing/{viewingId}/agreements/explanation")]
public Agreement GetViewingAgreement()
{
    return ...
}

但是我认为它最终会变得类似于这个控制器,因为我需要添加更多的案例,所以有几十个因为getby,getfor ...同时他们使用相同的模型(协议),所以我不确定将它们放在Viewings和Visit的控制器中是否是更好的设计,或者甚至还有另一种我无法想到的选择。

我很感激任何对此的看法。

由于

1 个答案:

答案 0 :(得分:0)

如果您想避免代码重复,可以创建一个额外的参数来告知它是访问还是查看协议:

[Route("agreements/{type}/{id}/explanation")]
public Agreement GetAgreement(string type, int id)
{
    // Some common operations

    if(type == "Visit")
    {
        // something specific concerning Visit agreement
    }
    else
    {
        // something specific concerning Viewing agreement
    }

    // return an agreement
}

通常,您围绕业务域构建控制器。例如,UserController管理用户详细信息,个人资料,权利等。在您的情况下,您可以考虑根据您的需要构建AgreementController处理不同类型的协议。