VB Web API - 表单编码值的属性名称,其名称为句点

时间:2016-09-22 17:38:25

标签: asp.net asp.net-mvc vb.net asp.net-web-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'和' 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

即使进入的项目将在用户一词之后有一段时间。

1 个答案:

答案 0 :(得分:1)

您可以向Ticket模型添加复杂属性。这些属性的名称应与之前的前缀匹配。&#39;。&#39;并且这些属性的类型应包含名称在&#39;。&#39;。

之后的属性

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

示例

在下面的示例中,我将Model,Controller和View添加到我使用Visual Studio创建的默认ASP.NET WebAPI项目中。

模型

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>