サードパーティの Web ブラウザー コントロールを使用して WPF プロジェクトに取り組んでいます。Web ページからデータを渡すために、JavaScript でリダイレクトを行ってから、ブラウザーの "Navigating" イベントをキャンセルしています [WebKit.NET を使用して JavaScript から C# 関数を呼び出すを参照してください)。
ナビゲート イベントでは、URL パラメータから引数のディクショナリを作成するためにいくつかの URL クランチを実行し、特定のメソッドを (これも URL に基づいて) 呼び出します。
この = 'app-Method?arg1=5.3&arg2=3' のような URL を使用すると、次の情報を含む Dictionary になります。
//var methodName = "Method";
//var dictionary = { { "arg1", "5.3" }, { "arg2", "3" } };
異なるメソッドは異なる型の異なる引数を持つため、この段階で変換を行うことはできません。
次に、次のように別のメソッド (URL からのメソッド名) を呼び出します。
switch(methodName)
{
case "Method":
Method(Convert.ToDecimal(dictionary["arg1"]), Convert.ToInt(dictionary["arg2"]));
break;
}
明らかに、MVC では、HTTPGet アクション メソッドがこの変換、処理、およびメソッド呼び出しをすべて実行します。(MVC ライブラリまたはその他の方法を使用して) MVC 以外のアプリケーションでこの種の動作を再現できるかどうか疑問に思っていました。これは、コードをきれいに表示し、さまざまな方法が多数ある場合に単純化するためです。
それが理にかなっているといいのですが、説明するのが少し難しいと思います。
編集:
完全なコード例は次のとおりです。
this.browser.Navigating += (s, ev) =>
{
if (ev.Url.AbsoluteUri.Contains("app"))
{
var method = ev.Url.Host.Split('-')[1];
var arguments = ev.Url.Query.TrimStart('?').Split('&');
var dictionary = new Dictionary<string, string>();
foreach (var arg in arguments)
{
var split = arg.Split('=');
dictionary.Add(split[0], split[1]);
}
switch (method)
{
case "add":
Add(Convert.ToInt32(dictionary["first"]), Convert.ToInt32(dictionary["second"]));
break;
default:
break;
}
ev.Cancel = true;
}
};