问题: 我应该如何命名将通过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
即使进入的项目将在用户一词之后有一段时间。
答案 0 :(得分:1)
您可以向Ticket
模型添加复杂属性。这些属性的名称应与之前的前缀匹配。&#39;。&#39;并且这些属性的类型应包含名称在&#39;。&#39;。
例如,要获取jump_item.*
值,您的Ticket
模型应包含名称为jump_item
的属性,该属性的类型包含* name:comments
的属性, computer_name
,group
,private_ip
,public_ip
,tag
和type
。
示例强>
在下面的示例中,我将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>