我有一个解决方案,其中包括一个胖客户端(在大多数用户界面中使用 CefSharp 实现),并且 javascript 应用程序需要在托管 CEF 浏览器的应用程序中执行一些 C# 逻辑。我考虑过使用WebView.RegisterJsObject()
,但如果我只能$.ajax()
从 html 页面中使用,我可以编写更少的胶水代码。
我已经为该解决方案中的 Web 服务和 Web 客户端设置了 ServiceStack。我想将来自 CEF 浏览器的请求路由到本地 ServiceStack 主机(实际上不使用 http)。
这是一些伪代码来说明我想做的事情:
public partial class MainWindow : IRequestHandler {
WebView _webView;
CefSharpServiceStackHost _serviceHost;
public MainWindow() {
// initialize CefSharp...
_webView.RequestHandler = this;
// initialize ServiceStackHost...
}
// other IRequestHandler methods...
// method this intercepts ajax calls from the CEF browser
public bool OnBeforeResourceLoad(IWebBrowser browser, IRequestResponse requestResponse) {
// translate CefSharp.IRequestResponse to ServiceStack.IRequest or HttpRequest
// should execute HelloService.Any() for the requestResponse.Url = "/hello/Zach"
var response = _serviceHost.ExecuteService(Translate(requestResponse));
requestResponse.RespondWith(response.Stream);
return false;
}
}
[Route("/hello/{Name}")]
public class Hello {
public string Hello { get; set; }
}
public class HelloService {
public object Any(Hello request) { // ... }
}
我不知道的部分是如何扩展ServiceStackHost以便我可以将某种请求对象传递给它。这甚至可能吗?