问题:我应该为将通过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
的属性,该属性的类型包含名为*的属性:comments
、computer_name
、group
、private_ip
、public_ip
、tag
和type
。
示例
在下面的示例中,我向默认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>