chromelyapps / Chromely

Build Cross Platform HTML Desktop Apps on .NET using native GUI, HTML5, JavaScript, CSS, Owin, AspNetCore (MVC, RazorPages, Blazor)
MIT License
2.98k stars 279 forks source link

Howto: Custom Request Scheme Handler #247

Closed mattkol closed 4 years ago

mattkol commented 4 years ago

CustomRequestHandler.zip

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            AppBuilder
            .Create()
            .UseApp<DemoApp>()
            .Build()
            .Run(args);
        }
    }

    public class DemoApp : ChromelyBasicApp
    {
        public override void ConfigureServices(ServiceCollection services)
        {
            base.ConfigureServices(services);
            services.AddSingleton(typeof(CustomRequestSchemeHandlerFactory), typeof(CustomRequestSchemeHandlerFactory));
            services.AddSingleton(typeof(IChromelySchemeHandler), typeof(CustomSchemeHandler));

            RegisterControllerAssembly(services, typeof(DemoApp).Assembly);
        }
    }
    public class CustomSchemeHandler : IChromelySchemeHandler
    {
        public CustomSchemeHandler(CustomRequestSchemeHandlerFactory schemeHandlerFactory)
        {
            Name = "MyCustomRequestSchemeHamdler";
            // Scheme: myscheme
            // Host: custom - mapped to folder name containing resource files
            //http://custom.com/customcontroller/hello";
            Scheme = new UrlScheme("mycustomrequestcheme", "http", "custom.com", string.Empty, UrlSchemeType.LocalRquest);
            HandlerFactory = schemeHandlerFactory;
            IsCorsEnabled = true;
            IsSecure = false;
        }

        public string Name { get; set; }
        public UrlScheme Scheme { get; set; }

        // Needed for CefSharp
        public object Handler { get; set; }
        public object HandlerFactory { get; set; }
        public bool IsCorsEnabled { get; set; }
        public bool IsSecure { get; set; }
    }
    public class CustomRequestSchemeHandler : CefResourceHandler
    {
    }
    public class CustomRequestSchemeHandlerFactory : CefSchemeHandlerFactory
    {
         protected override CefResourceHandler Create(CefBrowser browser, CefFrame frame, string schemeName, CefRequest request)
        {
            return new CustomRequestSchemeHandler();
        }
    }
    [ControllerProperty(Name = "CustomController")]
    public class CustomController : ChromelyController
    {
    }