我正在使用第三方 Web 浏览器控件开发 WPF 项目。为了从网页传递数据,我在 JavaScript 中进行重定向,然后取消浏览器的“导航”事件 [请参阅使用 WebKit.NET 从 JavaScript 调用 C# 函数)。
在导航事件中,我正在做一些 URL 处理以从 URL 参数创建参数字典,然后调用特定方法(也基于 URL)。
使用看起来像这样的 URL = 'app-Method?arg1=5.3&arg2=3' 我最终得到一个包含以下信息的字典:
//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;
}
};