まず、C#.NETについてはほとんど分かりません。私が持っているものは、私が必要とするものを得るために修正した実例から来ています。試行錯誤。私が持っているのは動作するC#.netコンソールアプリケーションです。VB.Net JWTトークンを使用したC#.net関数の呼び出し
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using JWT;
using Newtonsoft.Json.Linq;
namespace TimeworksAPI2
{
class Program
{
const string AUTHSERVICE = "https://workingURL/";
const string twpAIPURL = "https://workingURL/";
static void Main(string[] args)
{
int PartnerID = 222;
string SiteID = "XXXXX";
string StartDate = "2017-04-11";
string EndDate = "2017-04-11";
string Category = "vacation";
string key = "XXXXXXXXXXX";
Dictionary<string, decimal> Results = GetAccrualData(StartDate,EndDate,Category, SiteID, key, PartnerID);
}
static public Dictionary<string, decimal> GetAccrualData(string StartDate, string EndDate, string Category, string SiteID, int PartnerID, string key)
{
var apptoken = "";
var token = new
{
iss = PartnerID,
product = "twppartner",
sub = "partner",
siteInfo = new
{
type = "id",
id = SiteID
},
exp = (Int32)DateTime.UtcNow.Add(new TimeSpan(0, 4, 30)).Subtract(new DateTime(1970, 1, 1)).TotalSeconds
};
var jwt = JsonWebToken.Encode(token, key, JwtHashAlgorithm.HS256);
WebRequest request = WebRequest.Create(AUTHSERVICE);
request.ContentType = "application/json";
request.Method = "POST";
request.Headers.Set("Authorization", string.Format("Bearer {0}", jwt));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.Created)
....
これはコード内のポイントまで機能します。私は認可トークンを取得します。次は、新しいC#.NETプロジェクトを作成しました。今回はクラスライブラリでした。私は同じコード(コピーして貼り付け)を使用してライブラリをDLLにコンパイルします。それから私は、C#のDLLを参照し、VB.NETのコンソールアプリケーションを作成します。私はこれを実行すると
Imports TWPAOI2Lib.TWPLIB
Module Module1
Sub Main()
Dim sStartDate As String = "2017-04-11"
Dim sEndDate As String = "2017-04-11"
Dim sCategory As String = "vacation"
Dim iPartnerID As Int32 = 222
Dim sPartnerKey As String = "XXXXXXXX"
Dim sSiteID As String = "XXXX"
Dim AccrualData As Dictionary(Of String, Decimal) = GetAccrualData(sStartDate, sEndDate, sCategory, sSiteID, iPartnerID, sPartnerKey)
End Sub
、それは動作しません:私は、「不正な」エラーが発生します。 私は考えることができるデータ型/サイズ、呼び出し引数、すべてをダブルチェックしましたが、C#アプリケーションの外部から呼び出されたときにどうしてそれが動作しないのか分かりません。私が何かばかげたことをしていないことを確認するために、3番目のアプリケーション、C#.NET、コンソールアプリケーションを作成しました。上で作成したものと同じdllを参照すると、呼び出しが機能します。ここには、DLLを呼び出すC#コンソールアプリケーションがあります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpTest
{
class Program
{
static void Main(string[] args)
{
int PartnerID = 329;
string SiteID = "44265";
string StartDate = "2017-04-11";
string EndDate = "2017-04-11";
string Category = "vacation";
string Key = "XXXXXXXXX";
Dictionary<string, decimal> Results = TWPAOI2Lib.TWPLIB.GetAccrualData(StartDate, EndDate, Category, SiteID, PartnerID,Key);
Console.WriteLine("done");
Console.ReadLine();
}
}
}
私が間違っていることを教えてもらえますか?私は文字列ではないので、C#でプログラムを続けることはできません。 vb.netは、私がこのアプローチをとっている理由です。私はこの作業をデバッグ/作成する際に私の次のステップについては愚かです。
すべての人に返信します。 フレッドあなたがVBとC#の例
C#で異なる順序でパラメータを渡している
これはVBでOption Strictが必要な理由です。 'GetAccrualData(string StartDate、string EndDate、string Category、string SiteID、string key、int PartnerID)' 'GetAccrualData(sStartDate、sEndDate、sCategory、sSiteID、iPartnerID、 sPartnerKey) '。パートナIDとパートナキーを間違った順序で渡す方法に注意してください。 'Option Strict'では、コンパイル時にエラーが出ることが予想されます。 –
私にそれを指摘してくれてありがとうJon;私はOption Strict(デフォルトでそこにあったはずです)を追加しました。私のパラメータリストの順序を修正しましたが、それは "Unauthorized"という同じエラーではまだ動作しません。私はDLLに両方の呼び出し元を介して一歩を踏み出しました。値は予期したとおりですが、私が見ることができるのはC#アプリケーションの動作とVB.NETの違いだけです。再度、感謝します;私は明らかにまだもっと助けが必要です。 –
その時点で、私は送信された要求とそれぞれの場合に受け取った応答を注意深く見ていきます。 –