Difference between revisions of ".NET Core MVC Linux Sample"

From no name for this wiki
Jump to: navigation, search
(Created page with "== project.json == <source lang="json"> </source> == MyController.json == == Model == == View ==")
 
(Creating a self singed certificate)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
== project.json ==
+
== Intro ==
<source lang="json">
+
.net core MVC sample
 +
 
 +
== project.json (Directory .) ==
 +
<source lang="javascript">
 +
 
 +
{
 +
  "version": "1.0.0-*",
 +
  "buildOptions": {
 +
    "debugType": "portable",
 +
    "emitEntryPoint": true,
 +
    "preserveCompilationContext": true
 +
  },
 +
  "dependencies": {},
 +
  "frameworks": {
 +
    "netcoreapp1.0": {
 +
      "dependencies": {
 +
        "Microsoft.NETCore.App": {
 +
          "type": "platform",
 +
          "version": "1.0.0"
 +
        },
 +
        "Microsoft.AspNetCore.Razor.Tools": {
 +
          "version": "1.0.0-preview2-final",
 +
          "type": "build"
 +
        },
 +
        "Microsoft.AspNetCore.Mvc": "1.0.0",
 +
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
 +
        "Microsoft.Extensions.Logging": "1.0.0",
 +
        "Microsoft.Extensions.Logging.Console": "1.0.0",
 +
        "Microsoft.Extensions.Logging.Debug": "1.0.0",
 +
        "Microsoft.Extensions.Configuration.Json": "1.0.0",
 +
        "Microsoft.AspNetCore.Diagnostics": "1.0.0",
 +
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
 +
        "Microsoft.AspNetCore.StaticFiles": "1.0.0"
 +
      },
 +
      "imports": "dnxcore50",
 +
      "frameworkAssemblies": {
 +
       
 +
      }
 +
    }
 +
  },
 +
 
 +
  "runtimeOptions": {
 +
    "configProperties": {
 +
      "System.GC.Server": true
 +
    }
 +
  }
 +
 
 +
}
 +
 
 +
</source>
 +
 
 +
== appsettings.json (Directory .) ==
 +
<source lang="javascript">
 +
{
 +
  "MySettings": {
 +
    "ApplicationName": "My Very First MVC Application",
 +
    "MaxItemsPerList": 10
 +
  }, 
 +
  "Logging": {
 +
    "IncludeScopes": false,
 +
    "LogLevel": {
 +
      "Default": "Debug",
 +
      "System": "Error",
 +
      "Microsoft": "Error"
 +
    }
 +
  }
 +
}
 +
</source>
 +
 
 +
 
 +
== Programm.cs (Directory .) ==
 +
<source lang="csharp">
 +
using Microsoft.AspNetCore.Hosting;
 +
 
 +
namespace aspnetcoreapp
 +
{
 +
    public class Program
 +
    {
 +
        public static void Main(string[] args)
 +
        {
 +
            var host = new WebHostBuilder()
 +
                .UseKestrel()
 +
                .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
 +
                .UseStartup<Startup>()
 +
                .Build();
 +
 
 +
            host.Run();
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
 
 +
== Startup.cs (Directory .) ==
 +
<source lang="csharp">
 +
using System;
 +
using Microsoft.AspNetCore.Builder;
 +
using Microsoft.AspNetCore.Hosting;
 +
using Microsoft.AspNetCore.Http;
 +
using Microsoft.Extensions.Configuration;
 +
using Microsoft.Extensions.Logging;
 +
using Microsoft.Extensions.DependencyInjection;
 +
 
 +
namespace aspnetcoreapp
 +
{
 +
    public class Startup
 +
    {
 +
 
 +
        IConfigurationRoot Configuration;
 +
 
 +
        public Startup(IHostingEnvironment env)
 +
        {
 +
            // Set up configuration sources.
 +
            var builder = new ConfigurationBuilder()
 +
                .SetBasePath(env.ContentRootPath)
 +
                .AddEnvironmentVariables();
 +
 
 +
            builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);         
 +
 
 +
            if (env.IsDevelopment())
 +
            {
 +
               
 +
            }
 +
            Configuration = builder.Build();
 +
        }
 +
 
 +
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 +
        {
 +
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
 +
            loggerFactory.AddDebug();
 +
 
 +
            if (env.IsDevelopment())
 +
            {
 +
                app.UseDeveloperExceptionPage();             
 +
                app.UseBrowserLink();
 +
            }
 +
            else
 +
            {
 +
                app.UseExceptionHandler("/Home/Error");
 +
            }
 +
 
 +
            app.UseStaticFiles();           
 +
 
 +
            app.UseMvc(routes =>
 +
            {
 +
                routes.MapRoute(
 +
                    name: "default",
 +
                    template: "{controller=Home}/{action=Index}/{id?}");
 +
            });
 +
        }
 +
 
 +
        public void ConfigureServices(IServiceCollection services)
 +
        {         
 +
 
 +
            services.AddMvc();
 +
            services.AddSingleton<IOsmService, OsmService>();
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
== IOsmService.cs (Directory Services) ==
 +
<source lang="csharp">
 +
namespace aspnetcoreapp
 +
{
 +
    public interface IOsmService {
 +
        MapInfo LoadCoordinates();
 +
    }
 +
}
 +
</source>
 +
 
 +
== OsmService.cs (Directory Services) ==
 +
<source lang="csharp">
 +
namespace aspnetcoreapp
 +
{
 +
    public class OsmService : IOsmService
 +
    {
 +
        public MapInfo LoadCoordinates()
 +
        {
 +
            MapInfo mapInfo = new MapInfo(){
 +
                Longitude = "12.3455",
 +
                Latitude = "34.3344",
 +
            };
 +
            return mapInfo;
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
 
 +
== MapController.cs (Directory Controllers) ==
 +
<source lang="csharp">
 +
using Microsoft.AspNetCore.Mvc;
 +
 
 +
namespace aspnetcoreapp
 +
{
 +
    public class MapController : Controller {
 +
 
 +
        IOsmService _osmService;
 +
 
 +
        public MapController(IOsmService osmService){
 +
            _osmService = osmService;
 +
        }
 +
       
 +
        public string GetString() {
 +
            return "Hello World from Controller!";
 +
        }
 +
 
 +
        public ActionResult MyView()
 +
        {
 +
            MapInfo model = _osmService.LoadCoordinates();
 +
           
 +
            return View("MyView", model);
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
== MapInfo (Directory Models) ==
 +
<source lang="csharp">
 +
namespace aspnetcoreapp
 +
{
 +
    public class MapInfo {
 +
        public string Latitude {get; set;}
 +
        public string Longitude {get;set;}
 +
    }
 +
}
 +
</source>
 +
 
 +
== MyView.cshtml (Directory Views -> Map) ==
 +
<source lang="html5">
 +
@model aspnetcoreapp.MapInfo
 +
@{
 +
    ViewData["Title"] = "Coordinates";
 +
}
 +
 
 +
<html>
 +
<body>
 +
    <h2>@ViewData["Title"]</h2>
 +
    <p>
 +
        <ul>
 +
            <li>Longitude: @Html.DisplayFor(x => x.Longitude)</li>
 +
            <li>Longitude: @Html.DisplayFor(x => x.Latitude)</li>
 +
        </ul>     
 +
    </p>
 +
</body>
 +
</html>
 
</source>
 
</source>
== MyController.json ==
 
  
== Model ==
+
== Creating a self singed certificate ==
 +
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 9999
 +
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert_key.p12
 +
 
 +
== Loading ==
 +
<source lang="csharp">
 +
using Microsoft.AspNetCore.Hosting;
 +
using System;
 +
 
 +
namespace aspnetcoreapp
 +
{
 +
    public class Program
 +
    {
 +
        public static void Main(string[] args)
 +
        {
 +
 
 +
            var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder();                     
 +
 
 +
            System.Security.Cryptography.X509Certificates.X509Certificate2 certificate
 +
            = new System.Security.Cryptography.X509Certificates.X509Certificate2("cert_key.p12","bla");
 +
 
 +
            if(!certificate.HasPrivateKey)
 +
            {
 +
                throw new System.Exception("Lacking pk");
 +
            }
  
== View ==
+
            var host = new WebHostBuilder()
 +
                .UseKestrel(options =>
 +
                    options.UseHttps(certificate))
 +
                .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
 +
                .UseUrls("http://*:4000/;https://*:44300/")
 +
                .UseStartup<Startup>()
 +
                .Build();
 +
 
 +
            host.Run();
 +
        }
 +
    }
 +
}
 +
</source>

Latest revision as of 14:33, 17 September 2016

Intro

.net core MVC sample

project.json (Directory .)

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        },
        "Microsoft.AspNetCore.Razor.Tools": {
          "version": "1.0.0-preview2-final", 
          "type": "build"
        },
        "Microsoft.AspNetCore.Mvc": "1.0.0",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
        "Microsoft.Extensions.Logging": "1.0.0",
        "Microsoft.Extensions.Logging.Console": "1.0.0",
        "Microsoft.Extensions.Logging.Debug": "1.0.0",
        "Microsoft.Extensions.Configuration.Json": "1.0.0",
        "Microsoft.AspNetCore.Diagnostics": "1.0.0",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
        "Microsoft.AspNetCore.StaticFiles": "1.0.0"
      },
      "imports": "dnxcore50",
      "frameworkAssemblies": {
        
      }
    }
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  }
  
}

appsettings.json (Directory .)

{
  "MySettings": {
    "ApplicationName": "My Very First MVC Application",
    "MaxItemsPerList": 10
  },  
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Error",
      "Microsoft": "Error"
    }
  }
}


Programm.cs (Directory .)

using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}


Startup.cs (Directory .)

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;

namespace aspnetcoreapp
{
    public class Startup
    {

        IConfigurationRoot Configuration;

        public Startup(IHostingEnvironment env)
        {
            // Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath) 
                .AddEnvironmentVariables();

            builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);          

            if (env.IsDevelopment())
            {
                
            }
            Configuration = builder.Build();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();              
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();            

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

        public void ConfigureServices(IServiceCollection services)
        {           

            services.AddMvc();
            services.AddSingleton<IOsmService, OsmService>();
        }
    }
}

IOsmService.cs (Directory Services)

namespace aspnetcoreapp
{
    public interface IOsmService {
        MapInfo LoadCoordinates();
    }
}

OsmService.cs (Directory Services)

namespace aspnetcoreapp
{
    public class OsmService : IOsmService
    {
        public MapInfo LoadCoordinates()
        {
            MapInfo mapInfo = new MapInfo(){
                Longitude = "12.3455",
                Latitude = "34.3344",
            };
            return mapInfo;
        }
    }
}


MapController.cs (Directory Controllers)

using Microsoft.AspNetCore.Mvc;

namespace aspnetcoreapp
{
    public class MapController : Controller {

        IOsmService _osmService;

        public MapController(IOsmService osmService){
            _osmService = osmService;
        }
        
        public string GetString() {
            return "Hello World from Controller!";
        }

        public ActionResult MyView()
        {
            MapInfo model = _osmService.LoadCoordinates();
            
            return View("MyView", model);
        }
    }
}

MapInfo (Directory Models)

namespace aspnetcoreapp
{
    public class MapInfo {
        public string Latitude {get; set;}
        public string Longitude {get;set;}
    }
}

MyView.cshtml (Directory Views -> Map)

@model aspnetcoreapp.MapInfo
@{
    ViewData["Title"] = "Coordinates";
}

<html>
<body>
    <h2>@ViewData["Title"]</h2>
    <p>
        <ul>
            <li>Longitude: @Html.DisplayFor(x => x.Longitude)</li>
            <li>Longitude: @Html.DisplayFor(x => x.Latitude)</li>
        </ul>       
    </p>
</body>
</html>

Creating a self singed certificate

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 9999
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert_key.p12

Loading

using Microsoft.AspNetCore.Hosting;
using System;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {

            var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder();                       

            System.Security.Cryptography.X509Certificates.X509Certificate2 certificate
             = new System.Security.Cryptography.X509Certificates.X509Certificate2("cert_key.p12","bla");

            if(!certificate.HasPrivateKey)
            {
                throw new System.Exception("Lacking pk");
            }

            var host = new WebHostBuilder()
                .UseKestrel(options =>
                    options.UseHttps(certificate))
                .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
                .UseUrls("http://*:4000/;https://*:44300/")
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}