System.FormatException: строка должна содержать только шестнадцатеричные цифры ... MongoDB, WebApi - PullRequest
0 голосов
/ 30 апреля 2019

Это программа 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 показан ниже POSTMAN

Ниже приведен скриншот для вызова на другое действие. Call going wrong

Я понятия не имею, почему id получает значение в качестве параметра, поскольку я вызвал метод get без значения! Я новичок в mongodb и веб-API! Пожалуйста, помогите!

...