Это программа CRUD op в MongoDB, использующая веб-API в другом проекте. При выполнении операции GET для отображения всех значений в коллекции, вызов переходит прямо к действию, где мы получаем данные по идентификатору.
Когда я проверяю URI в почтальоне, он показывает ошибку
System.FormatException: строка должна содержать только шестнадцатеричные цифры
Я понятия не имею, почему передается id и вызов переходит к той функции, когда явно не вызывается параметр id ни в каком контексте.
Contact.cs
Public Class Contact
<BsonId>
<BsonRepresentation(BsonType.ObjectId)>
Public Property Id As String
Public Property Name As String
Public Property Address As String
Public Property Phone As String
Public Property Email As String
End Class
ContactOperation.vb (операции CRUD)
Public Class ContactOperation
Protected Shared _client As IMongoClient
Protected Shared _database As IMongoDatabase
Protected Shared _collection As IMongoCollection(Of Contact)
Public Sub New()
_client = New MongoClient("mongodb://localhost:27017")
_database = _client.GetDatabase("mydb")
_collection = _database.GetCollection(Of Contact)("contact")
End Sub
Public Async Function GetAllContact() As Task(Of IEnumerable(Of Contact))
Dim filter = New BsonDocument()
Dim result = Await _collection.Find(filter).ToListAsync()
Dim test As String = "Test"
Return result
End Function
Public Async Function GetContact(ByVal id As Object) As Task(Of Contact)
Dim filter = Builders(Of Contact).Filter.Eq(Function(e) e.Id, id)
Dim result = Await _collection.Find(filter).FirstOrDefaultAsync()
Return result
End Function
End Class
ValuesController
Public Class ValuesController
Inherits ApiController
Private _contactOp As ContactOperation
Public Sub New()
_contactOp = New ContactOperation()
End Sub
<HttpGet>
Public Async Function [Get]() As Task(Of IHttpActionResult)
Dim contact = Await _contactOp.GetAllContact()
Return Ok(contact)
End Function
<HttpGet>
Public Async Function [Get](ByVal id As String) As Task(Of IHttpActionResult)
Dim contact = Await _contactOp.GetContact(New ObjectId(id))
Return Ok(contact)
End Function
End Class
ValuesController (использующий Web API) другой проект:
Public Class ValuesController
Inherits Controller
Function Index() As ActionResult
Dim contacts As IEnumerable(Of Contact) = Nothing
Using client = New HttpClient()
client.BaseAddress = New Uri("http://localhost:57169/api/values/get")
Dim responseTask = client.GetAsync("contact")
responseTask.Wait()
Dim result = responseTask.Result
If result.IsSuccessStatusCode Then
Dim readTask = result.Content.ReadAsAsync(Of IList(Of Contact))()
readTask.Wait()
contacts = readTask.Result
Else
contacts = Enumerable.Empty(Of Contact)()
ModelState.AddModelError(String.Empty, "Server error. Please contact administrator.")
End If
End Using
Return View(contacts)
End Function
End Class
Скриншот ошибки при тестировании API в POSTMAN показан ниже
Ниже приведен скриншот для вызова на другое действие.
Я понятия не имею, почему id получает значение в качестве параметра, поскольку я вызвал метод get без значения! Я новичок в mongodb и веб-API! Пожалуйста, помогите!