概要
・他者とAPIで送受信しています(つまり送る方と受け取る方)
・APIの構築はこちらがvb.net、先方はJava
・データはJSONでの送受信
・客先での連携テストなので、デバック環境は乏しい
問題
・こちらからのAPI送信が、先方でエラーになっている
・原因はヘッダが取得できないためとのこと
・ヘッダが無く、データのみが送信されているとのこと
・開発中は簡易コントローラーでヘッダ、データ(JSON)が取得できることを確認済
・先方発信APIの場合、こちらのコントローラーではヘッダ、データを正しく取得できている
試したこと
・再度開発環境でヘッダ、データ(JSON)の取得を確認(ただあくまでもIISの世界)
・以前にご教授いただいた『Fiddler』で調査
Fiddlerで調査
1.先方からこちらのコントローラーへのリクエスト(先方はPostmanで代用)
・結果は正しくヘッダ、データが取得できている
Inspectors>Headersで期待した値を確認
取得したヘッダの値(期待通り)
Entity Content-Type: application/json
Miscellaneous XXX-RId : 2019-07-16-001 ※実際のキー、値は異なります
2.こちらから先方へのリクエスト(先方はこちらで作ったvb.netの簡易コントローラーで代用)
・期待したヘッダ、データがFiddlerでは取得できていない
※但し、visual stadioのデバックでは簡易コントローラーでヘッダ、データが取得できている
取得したヘッダの値(期待した結果ではない)
Entity Content-Type: application/x-www-form-urlencoded
Miscellaneous セットしたヘッダ無し
※データも取得できていない
ソース(エラーになっている送信API)
ソース
Public Class restApi100 ・ ・ ・ '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("UTF-8") Dim result As String Using stream As New IO.MemoryStream '--- シリアライズ Dim serializer As New DataContractJsonSerializer(json.GetType) serializer.WriteObject(stream, json) '--- 結果を取得 result = System.Text.Encoding.UTF8.GetString(stream.ToArray()) End Using 'バイト型配列に変換 Dim postDataBytes As Byte() = enc.GetBytes(result) '--- 日本語も変換できた 'HttpWebRequestの作成 Dim req As HttpWebRequest = CType(HttpWebRequest.Create(pmsUrl), HttpWebRequest) ' 暗黙変換できなかったのでCTypeでキャスト req.Method = "POST" ' Method req.ContentType = "application/json; charset=utf-8" ' ※header1 req.Headers.Add("XXX-RId", "2019-07-16-001") ' ※header2 req.ContentLength = postDataBytes.Length ' ContentLength 'データをPOST送信するためのStreamを取得 Dim reqStream As System.IO.Stream = req.GetRequestStream() '送信するデータを書き込む reqStream.Write(postDataBytes, 0, postDataBytes.Length) reqStream.Close() 'サーバーからの応答を受信するためのWebResponseを取得 Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse) '※※※ ここでリクエスト実行 ※※※ '応答データを受信するためのStreamを取得 Dim resStream As System.IO.Stream = res.GetResponseStream() ・ ・ ・ ``` ## ソース(受信側) ※これが簡易コントローラー ``` Public Class restApi500 '-------------------------------------------------------------------- ' 簡易コントローラー '-------------------------------------------------------------------- <OperationContract(), WebInvoke()> Public Function report(req As List(Of RequestJsonItem)) As ResponseJsonClass Dim RequestHeaders = WebOperationContext.Current.IncomingRequest.Headers ' リクエストヘッダー Dim strConType As String = RequestHeaders("Content-Type") '--- "application/json; charset=utf-8" Dim strXXX-RId As String = RequestHeaders("XXX-RId") '--- "2019-07-16-001" ・ ・ ・ ※デバックだとヘッダが取得できている ``` --------------------------------------------------------------------------- ## 確認 Q1. リクエスト実行時、Fiddlerにヘッダやデータが正しく取得できていないということは こちらの送信APIに問題があるのでしょうか? もしくはこちらのAPサーバーやIISの設定等に問題があるのでしょうか? そしてヘッダだけなぜ渡らないのでしょうか? Q2. こちら側が問題の場合、対処法はどのようにすればいいのかご教授願います
回答1件
あなたの回答
tips
プレビュー