В моем ApiController у меня был один метод GET , который возвращал некоторые данные из БД.

Теперь мне нужно увеличить этот контроллер, добавив еще один метод GET , который будет возвращать данные из той же базы данных, но с другим форматом, поэтому параметры , которые я передал этому методу, будут такими же < / strong> как с 1-го.

Я пытался сделать следующее:

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 не работает, поскольку есть два метода, для которых требуются одинаковые параметры, поэтому он не знает, как выбрать, какой из них использовать.

На самом деле я вызываю следующий api по следующему URL-адресу api / csh /, возможно ли каким-то образом, вызывая 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

Я пытался добавить <Route("api/csh/op")> выше Get Operazioni, но это не помогло.

2
NiceToMytyuk 26 Ноя 2019 в 18:41

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

Ссылка Маршрутизация атрибутов в ASP.NET Web API 2

1
Nkosi 26 Ноя 2019 в 16:24