2016-09-22 4 views
2

質問: HTTPリクエストからフォームエンコードされた入力を介して割り当てられるプロパティの名前は、そのプロパティがフォームにエンコードされた入力からクラスの新しいインスタンスを作成すると、その名前にピリオドを持ついくつかのキーが含まれます。VB Web API - フォームのプロパティ名エンコードされた値のピリオド付き名前

私は、ASP.NET self-hosed Web APIを使用するVB.NETアプリケーションを持っています。

このメソッドの1つは、アプリケーションBomgarからの入力を受け入れます。私は「REQUEST_ID」、「response_url」、および「TICKET_ID」部分を処理することができるよ

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= 

、:

に送られたのデータは、フォームエンコード形式であり、次のようになります。同じ名前のプロパティを持つオブジェクトを確立します。

私はこのフォーム入力を受け入れ、このデータを含むhttpメッセージの本文をオブジェクトに送ると、フォーム入力をそれらの名前を含むプロパティに自動的にマップすることを読んだので、これを実行しました。

だから私は以下のように定義チケットという名前のクラス、持っている:

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

Ticketモデルに複雑なプロパティを追加できます。それらのプロパティの名前は '。'の前の接頭辞と一致する必要があります。これらのプロパティのタイプには、 '。'の後にnameという名前のプロパティが含まれている必要があります。 commentscomputer_namegroupprivate_ippublic_iptagtype

jump_item.*値を取得するたとえば、あなたTicketモデルは*名前のプロパティが含まれているタイプのものであり名前jump_itemを持つプロパティが含まれている必要があります。

例例以下では、私はモデル、コントローラおよびIは、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> 
+0

これは素晴らしい応答でした。私は物事の全体的なモデル/コントローラ/ビューの側面で経験はありません。私は現在、ASP.NET Web APIを使用するデスクトップアプリケーションを持っています。ビューは必要ですか? – schizoid04

+0

これはすごくうまくいった!あなたには感謝してもしきれません。 – schizoid04

+0

あなたは大歓迎です:) –

関連する問題