GET到的WebAPI调用(GET calls to WebAPI)

2019-10-23 04:08发布

我有一个XML响应到Web API的调用问题。 具体而言,我有一个功能“的GetValue”打电话,当我要以XML格式为基础,以ID或类“Cellulare”或类“Televisore”返回。

问题是,如果我从浏览器的请求,给了我下面的错误:

<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>

这是例子:

Public Class Cellulare
    Public Property Colore As String
    Public Property SistemaOperativo As String
End Class

Public Class Televisore
    Public Property Colore As String
    Public Property Marca As String
End Class          

Public Function GetValue(ByVal id As Integer) // ' As Cellulare
    If Id = 1 Then    
        Dim MyTelevisore As New Televisore    
        MyTelevisore.Colore = "grigio"
        MyTelevisore.Marca = "lg"
        Return MyTelevisore
    Else            
        Dim MyCellulare As New Cellulare    
        MyCellulare.Colore = "nero"
        MyCellulare.SistemaOperativo = "android"    
        Return MyCellulare
    End If    
End Function

谁能帮我解决这个问题???

预先感谢问候多纳托

Answer 1:

我觉得你的做法是错误的。

你有简单的对象返回,可以很容易通过的WebAPI所提供的默认串行处理。

你返回的对象类型应该是IHttpActionResult (webapi2)或HttpResponseMessage

我不会去什么@Frank维特建议,原因返回对象本身是不好的做法。 特别是在这里你可以通过返回的通用对象IHttpActionResult / HttpResponseMessage

你应该这样做:

Public Function GetValue(ByVal id As Integer) As IHttpActionResult
    If Id = 1 Then    
        Dim MyTelevisore As New Televisore    
        MyTelevisore.Colore = "grigio"
        MyTelevisore.Marca = "lg"
        Return Ok(MyTelevisore)
    Else            
        Dim MyCellulare As New Cellulare    
        MyCellulare.Colore = "nero"
        MyCellulare.SistemaOperativo = "android"    
        Return Ok(MyCellulare)
    End If    
End Function


Answer 2:

因为你不提供任何返回类型的getValue函数,它抛出的错误。 你的评论了这一点。

正如我可以从你的代码告诉你,正在返回根据您提供给的GetValue呼叫ID的不同类型的对象。 我不知道你正在尝试做完整的内容,但是从我可以看到它会更有意义有不同的控制器,或至少路线,针对不同类型的对象:

/api/cellulare/<id>

将映射到控制器CellulareController。

/api/televisore/<id>

将映射到控制器TelevisoreController。 每一个都有自己的get(),邮政()和delete(),如果你愿意的方法。

希望这可以帮助。



文章来源: GET calls to WebAPI