Я только начинаю использовать веб-контроллеры API2 и, с некоторыми трудностями. Я использую также маршрутизацию атрибутовНет Получить метод в web-контроллере api2
ОБНОВЛЕНО: My Controller настроен следующим образом;
Namespace TraderProductData
<RoutePrefix("api/symbols")>
Public Class SymbolsController
Inherits ApiController
Private db As New SymbolsEntities
'GET api/Symbols
<HttpGet> _
Function Getsymbols() As IQueryable(Of symbol)
Return db.symbols
End Function
'GET api/Symbols/20 ....20 is for equities, so get equity symbols
<HttpGet> _
<Route("{symbolType}", Name:="getsymbolsfortype")> _
Function GetSymbolsForType(ByVal symbolType As Integer) As IQueryable(Of symbol)
Dim symbols As IQueryable(Of symbol) = From d In db.symbols
Where d.SymbolType = symbolType
Select d
Return symbols
End Function
'GET api/symbols/SymbolExistsId/1922
<HttpGet> _
<Route("SymbolExistsId/{id}", Name:="symbolexistsid")> _
Function SymbolExistsId(ByVal id As Integer) As Boolean
Return db.symbols.Count(Function(e) e.Id = id) > 0
End Function
'GET api/symbols/SymbolExists/AAPL
<HttpGet> _
<Route("SymbolExists/{symbol}", Name:="symbolexistssymbol")> _
Function SymbolExists(ByVal symbol As String) As Boolean
Return db.symbols.Count(Function(e) e.Symbol1 = symbol) > 0
End Function
'GET api/symbols/GetNameIfSymbolExists/AAPL
<HttpGet> _
<Route("GetNameIfSymbolExists/{symbol}", Name:="getnameifsymbolexists")> _
Function GetNameIfSymbolExists(ByVal symbol As String) As String
Dim symbolName As String = (From d In db.symbols
Where d.Symbol1 = symbol
Select d.Name).FirstOrDefault()
Return symbolName
End Function
'GET api/symbols/GetNameIfSymbolIdExists/1922
<HttpGet> _
<Route("GetNameIfSymbolIdExists/{id}", Name:="getnameifsymbolidexists")> _
Function GetNameIfSymbolIdExists(ByVal id As Integer) As String
Dim symbolName As String = (From d In db.symbols
Where d.Id = id
Select d.Name).FirstOrDefault()
Return symbolName
End Function
'GET api/symbols/GetSymbolIdIfSymbolExists/AAPL
<HttpGet> _
<Route("GetSymbolIdIfSymbolExists/{symbol}", Name:="getsymbolidifsymbolexists")> _
Function GetSymbolIdIfSymbolExists(ByVal symbol As String) As Integer
Dim symbolId As Integer = (From d In db.symbols Where d.Symbol1 = symbol Select d.Id).FirstOrDefault()
Return symbolId
End Function
<HttpGet> _
<Route("GetSymbolById/{id}", Name:="getsymbolbyid")> _
<ResponseType(GetType(symbol))> _
Async Function GetSymbolById(ByVal id As Integer) As Task(Of IHttpActionResult)
Dim symbol As symbol = Await db.symbols.FindAsync(id)
If IsNothing(symbol) Then
Return NotFound()
End If
Return Ok(symbol)
End Function
' POST api/Symbols
<HttpPost> _
<Route("{symbol}", Name:="postsymbol")> _
<ResponseType(GetType(symbol))> _
Async Function Postsymbol(ByVal symbol As symbol) As Task(Of IHttpActionResult)
If Not ModelState.IsValid Then
Return BadRequest(ModelState)
End If
db.symbols.Add(symbol)
Await db.SaveChangesAsync()
Return CreatedAtRoute("DefaultApi", New With {.id = symbol.Id}, symbol)
End Function
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If (disposing) Then
db.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
End Class
End Namespace
выше теперь работает, как ожидалось
Я дал ответ Джейсону, потому что он ответил сначала, но я поддержал вас. Любая подсказка, почему я получаю ошибку распознавателя ограничений, если я пытаюсь добавить ограничение к параметру? Таким образом _ –
dinotom
1. Нет такого ограничения, которое называется string, посмотрите в этой ссылке на доступные ограничения: http: // www. asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 Также обратите внимание, что, хотя ответ Джейсона будет работать, вы должны действительно внести полный изменения I «Предлагаю. В противном случае вы остаетесь в хрупком состоянии. В качестве альтернативы рассмотрим –
. Я получаю ту же ошибку при использовании {id: integer}, которая должна быть действительной для vb.net или {id: int} для C# – dinotom