Wednesday, April 22, 2020

Self Host Web API in C# ASP.NET Web Api with Swagger

Please download source code form here

1. Add a console application
2. Add the following nuget packages in you application


  •    Microsoft.AspNet.WebApi.Client
  •    Microsoft.AspNet.WebApi.Core
  •   Microsoft.AspNet.WebApi.SelfHost
  •   Microsoft.AspNet.WebApi.WebHost  
  •   Swashbuckle
  •   Swashbuckle.Core

3. Add a windows service class "WebApi.cs"   and write the following code

    partial class WebApi : ServiceBase
    {
        public WebApi()
        {
            InitializeComponent();
        }
        private HttpSelfHostConfiguration config;
        protected override void OnStart(string[] args)
        {
            config = new HttpSelfHostConfiguration("http://localhost:8085");
            config.MapHttpAttributeRoutes();
            //config.Routes.MapHttpRoute("default",
            //                            "api/{controller}/{id}",
            //                            new { id = RouteParameter.Optional });
            config.Routes.MapHttpRoute(
                                      name: "API Default",
                                      routeTemplate: "api/{controller}/{id}",
                                        defaults: new { id = RouteParameter.Optional }
                                    );
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            config.EnableSwagger(c =>
            {
                c.SingleApiVersion("v1", "WebApiSelfHost");
                c.IncludeXmlComments(GetXmlcontetpat());
                c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
                c.DescribeAllEnumsAsStrings();
                //c.IncludeXmlComments(string.Format(@"{0}\bin\WebApiSelfHost.XML",
                //                     System.AppDomain.CurrentDomain.BaseDirectory));
            }).EnableSwaggerUi(x => x.DisableValidator());

            var server = new HttpSelfHostServer(config);
            var task = server.OpenAsync();
            task.Wait();
        }

        private string GetXmlcontetpat()
        {
            return AppDomain.CurrentDomain.BaseDirectory + @"WebApiSelfHost.XML";
        }

        protected override void OnStop()
        {
            // TODO: Add code here to perform any tear-down necessary to stop your service.
            if (config != null)
            {
                config.Dispose();
            }

        }
        internal void TestStartupAndStop(string[] args)
        {
            this.OnStart(args);
            //Console.ReadLine();
            //this.OnStop();
        }

        [Conditional("DEBUG_SERVICE")]
        private static void DebugMode()
        {
            Debugger.Break();
        }
    }

4. write the following code on your Main function in Program.cs

         static void Main(string[] args)
        {
            if (Environment.UserInteractive)
            {
                WebApi service1 = new WebApi();
                service1.TestStartupAndStop(args);
            }
            else
            {
                ServiceBase[] ServicesToRun;
                WebApi _selfHostService = new WebApi();
                _selfHostService.ServiceName = "WebAPI_Hosted";
                ServicesToRun = new ServiceBase[]
                {
                _selfHostService
                };
                ServiceBase.Run(ServicesToRun);
            }
            Console.WriteLine("Web API Server has started at http://localhost:8085");
            Console.ReadLine();
        }


Please download source code form here

1 comment:

Bind SSL on Port or Self Host WCF Service add SSL on Port

To Create certificate first, Run flowing command on power shell (Administrator mode) Create cert. New-Sel...