
##【やりたいこと】
・VB.NETでJSONデータを送信したいのですが、エラーが消えません
→ リストリモート サーバーがエラーを返しました: (400) 要求が不適切です
・簡易的にリクエストを受取るソースを作りました(リクエストデータをそのまま返すだけ)
・ARC(google Chromeの拡張機能)でリクエストすると、正しく返ります
##【環境】
visual stadio 2010
VB.NET 2010
.net framework 4.0
##【ソース・サーバー側の簡易コントローラ】
<ServiceContract(namespace:="http://aaa/bbb/api/ccc/")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class KaniCntl
Inherits System.Web.UI.Page '-------------------------------------------------------------------- ' report簡易コントローラー(構造型のリクエストJSONをそのまま返す) '--------------------------------------------------------------------
<OperationContract(), WebInvoke()>
Public Function report(req As List(Of RequestJson3)) As List(Of RequestJson3)
Dim RequestHeaders = WebOperationContext.Current.IncomingRequest.Headers ' リクエストヘッダー Return req End Function
End Class
##【JSON定義側】
'--------------------------------------------------------------------
' リクエスト・メインクラス(JSON List)
'--------------------------------------------------------------------
Public Class RequestJson3
Property headerlist3 As New List(Of HeaderList3) '--- 配列データ
Property reqdat3 As New List(Of DataList3) '--- 配列データ
End Class
'--------------------------------------------------------------------
' リクエスト・ヘッダークラス(List)
'--------------------------------------------------------------------
Public Class HeaderList3
Property recordNo As String = "" '--- レコード番号
Property appVer As String = "" '--- 識別情報
Property houkokuTime As String = "" '--- データ作成日時
End Class
'--------------------------------------------------------------------
' リクエスト・データクラス(List)
'--------------------------------------------------------------------
Public Class DataList3
Property recordNo As String = "" '--- レコード番号
Property okozukai As String = "" '--- お小遣い
Property actiondate As String = "" '--- 使った日
End Class
※もちろん、実際の中身とは異なります
##【ソース・リクエスト側】
Private Function RequestToPMS3(ByRef json As RequestJson3) As String
'文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("UTF-8") 'POST送信する文字列を作成 Dim postData As String postData = System.Web.HttpUtility.UrlEncode(json.ToString, enc) `※ JSONではなく、"xxx.RequestJson3"の文字になっている` 'バイト型配列に変換 Dim postDataBytes As Byte() = enc.GetBytes(postData) Dim wc As New System.Net.WebClient '--- ヘッダ --- ' Content-Type wc.Headers.Add("Content-Type", "application/json; charset=utf-8") ' 連携リクエストID wc.Headers.Add("X-Request-Id", getRequestId()) Dim eMsg As String = "" Try '***** データを送信し、結果を受信する ***** reqCount = reqCount + 1 Dim resData As Byte() resData = wc.UploadData(pmsRequestUrl, postDataBytes) `※ここで400のエラーになります` wc.Dispose() '受信した結果(JSONデータ)を表示する Dim resText As String = enc.GetString(resData) Console.WriteLine(resText)
~
~
~
~
End Function
##【問い合わせ内容】
いろいろサンプル試したのですが、ことごとくエラーになります
0. どこがいけないのかご教授願います
- JSONですが、汎用的にどんな形や項目がきても受取れるプログラミングはできないのでしょうか?
どれも事前にJSONの項目をクラス定義しとかないといけないサンプルばかりでしたので不便かなと。。。
- postData = System.Web.HttpUtility.UrlEncode(json.ToString, enc)の結果がJSONではなく、"xxx.RequestJson3"の文字になってしまう(これがまずNG)
以上、よろしくお願いいたします。



回答3件
あなたの回答
tips
プレビュー