VBWebneneneba API-名称中带句点的窗体编码值的属性名称



问题:我应该为将通过HTTP请求的表单编码输入分配的属性命名什么,以确保当我从表单编码输入创建类的新实例时,该属性将被填充,该实例的名称中会有一些带句点的键?

我有一个VB.NET应用程序,它利用了ASP。NET自插式Web API。

其中一个方法接受来自应用程序Bomgar的输入。

发送的数据是以形式编码的格式,看起来如下所示:

jump_item.comments=
&jump_item.computer_name=
&jump_item.group=
&jump_item.private_ip=
&jump_item.public_ip=
&jump_item.tag=
&jump_item.type=
&request_id=
&response_url=
&ticket_id=
&user.email_address=
&user.id=
&user.private_display_name=
&user.public_display_name=
&user.username=

通过建立一个具有相同名称属性的对象,我能够处理"request_id"、"response_url"one_answers"ticket_id"部分。

我之所以这么做,是因为我读到,当接受此表单输入并将包含此数据的http消息的主体发送到对象中时,它将自动将表单输入映射到包含这些名称的属性中。

所以我有一个名为Ticket的类,定义如下:

Public Class Ticket
    Public Property response_url As String
    Public Property request_id As String
    Public Property ticket_id As String

End Class

我通过我的控制器中的以下内容将表单数据的内容映射到这个类的实例中:

Public Sub PostProduct(<FromBody()> NewTicketRequest As Ticket)
...
End Sub

这将正确地分配该对象中的request_id、response_url和ticket_id属性。

但是,我也想捕获正在发送的jump_item输入和用户输入,但我不能在属性名称中包含句点。

当我将上面的HTTP表单编码数据传递到该对象的新实例中时,如何在Ticket类中包含将自动填充的属性?我不知道如何命名它们,或者我是否需要为它设置另一个对象

我希望能够以类似于的方式寻址用户电子邮件地址

NewTicketRequest.user.email_address

NewTicketRequest.user_email_address

即使进来的项目在单词user之后会有一个句点。

您可以将复杂属性添加到Ticket模型中。这些属性的名称应与"之前的前缀匹配并且这些属性的类型应包含名称在"."之后的属性。

例如,要获取jump_item.*值,Ticket模型应包含名为jump_item的属性,该属性的类型包含名为*的属性:commentscomputer_namegroupprivate_ippublic_iptagtype

示例

在下面的示例中,我向默认ASP添加了一个模型、控制器和视图。NET WebAPI项目,该项目是我使用Visual Studio创建的。

型号

Public Class Ticket
    Public Property Id As Integer
    Public Property Text As Integer
    Public Property User As ApplicationUser
End Class
Public Class ApplicationUser
    Public Property Id As Integer
    Public Property UserName As String
    Public Property DisplayName As String
End Class

控制器

Public Class ValuesController
    Inherits ApiController
    ' POST api/values
    Public Sub PostValue(<FromBody()> ByVal value As Ticket)
    End Sub
End Class

查看

<form action="/api/values" method="post">
    <input type="text" name="Id" />
    <input type="text" name="Text" />
    <input type="text" name="User.Id" />
    <input type="text" name="User.UserName" />
    <input type="text" name="User.DisplayName" />
    <input type="submit" value="Save" />
</form>

最新更新