如何在WebApi中路由具有相同参数的两个get方法?

问题描述 投票:2回答:1

在我的ApiController中,我有一个GET方法正在从数据库返回一些数据。

现在,我必须通过添加一个更多GET方法来扩大该控制器,该方法将从同一数据库返回数据,但是以另一种方式格式化,因此参数[[传递给该方法的参数将是相同的]与从第一个开始。

我正在尝试执行以下操作:

Public Class CshController Inherits ApiController Public Function GetValoriCsh(ByVal npv As String, ByVal nc As String) As IEnumerable(Of Cshlvl) Dim csh As Cshlvl = New Cshlvl Return csh.ValoreCsh(npv, nc) End Function Public Function GetOperazioni(ByVal npv As String, ByVal nc As String) As IEnumerable(Of OperazioniCsh) Dim operazioni As OperazioniCsh = New OperazioniCsh Return operazioni.OperazioniCsh(npv, nc) End Function End Class

所以问题来了,api失败了,因为有两种方法需要相同的参数,所以它不知道如何选择我要使用的方法。 

实际上,我是通过以下URL api / csh /调用以下api的,是否可以通过某种方式调用api / csh /从GetValoriCsh获取数据,就像通过调用api / csh / operazioni /这样的数据来获取数据一样来自GetOperazioni吗?

我的WebApiConfig

Public Module WebApiConfig Public Sub Register(ByVal config As HttpConfiguration) ' Servizi e configurazione dell'API Web ' Route dell'API Web config.MapHttpAttributeRoutes() config.Routes.MapHttpRoute( name:="DefaultApi", routeTemplate:="api/{controller}/{id}", defaults:=New With {.id = RouteParameter.Optional} ) End Sub End Module

我尝试在GetOperazioni上方添加<Route("api/csh/op")>,但没有效果。
vb.net asp.net-web-api2 asp.net-web-api-routing
1个回答
1
投票
如果使用属性路由,则全部或全部。

<RoutePrefix("api/csh")> Public Class CshController Inherits ApiController 'GET api/csh <HttpGet()> <Route("")> Public Function GetValoriCsh(ByVal npv As String, ByVal nc As String) As IEnumerable(Of Cshlvl) Dim csh As Cshlvl = New Cshlvl Return csh.ValoreCsh(npv, nc) End Function 'GET api/csh/op <HttpGet()> <Route("op")> Public Function GetOperazioni(ByVal npv As String, ByVal nc As String) As IEnumerable(Of OperazioniCsh) Dim operazioni As OperazioniCsh = New OperazioniCsh Return operazioni.OperazioniCsh(npv, nc) End Function End Class

参考Attribute Routing in ASP.NET Web API 2
© www.soinside.com 2019 - 2024. All rights reserved.