0

我正在尝试实现一个公开一些模型的 Web API 项目。但是,检索模型的方式不是很 RESTful。

1. 它不是只有一个 ID,而是组合了 4 个不同的 ID,通过在服务器上运行存储过程来填充模型数据。

Dim balance as New BalanceSheet(uid, mid, eid, fid)

上面的代码片段将使用uid, mid, eid,fid从数据库中检索正确的记录。

我将如何在控制器中实现它以便/api/Balance?uid=1&mid=2&eid=3&fid=4映射到GetBalance(ByVal uid As Integer, ByVal mid As Integer, ByVal eid As Integer, ByVal fid As Integer)

2.此外,我希望能够过滤 BalanceSheet 模型的特定成员或获得一些预处理对象返回,如下所示: /api/Balance/FundCredit?uid=1&mid=2&eid=3&fid=4映射到GetFundcredit(ByVal uid As Integer, ByVal mid As Integer, ByVal eid As Integer, ByVal fid As Integer)

4

1 回答 1

2

我在这篇文章之后解决了这个问题:REST vs. RPC in ASP.NET Web API

我实际上是在尝试将两种不同的范式结合起来——RPC 和 REST。我最初(错误地)认为api/{controller}/{action}/{id}只能映射到返回ActionResult类型的函数。

这是我的路由规则:

        routes.MapHttpRoute( _
            name:="RPCApi", _
            routeTemplate:="api/{controller}/{action}"
        )

        routes.MapHttpRoute( _
            name:="RESTApi", _
            routeTemplate:="api/{controller}/{id}", _
            defaults:=New With {.id = RouteParameter.Optional} _
        )

其中分别映射api/balance/?uid=1&mid=2&eid=3&fid=4api/balance/fundcredit?uid=1&mid=2&eid=3&fid=4到这两个函数:

      Public Function GetBalance(ByVal uid As Integer, ByVal mid As Integer, ByVal eid As Integer, ByVal fid As Integer)
        Try
            Dim balance As New BalanceSheet(uid, mid, eid, fid)

            Return balance
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

    Public Function FundCredit(ByVal uid As Integer, ByVal mid As Integer, ByVal eid As Integer, ByVal fid As Integer)
        Dim balance As New BalanceSheet(uid, mid, eid, fid)

        Return balance.FundCredit
    End Function
于 2012-06-26T06:34:15.317 回答