Incomplete work on migrating Angular 2 Music Store sample to ASP.NET Core 1.0 RC2

This commit is contained in:
SteveSandersonMS
2016-04-05 12:19:01 +01:00
parent 1cb4dd920c
commit 507c4326ff
15 changed files with 85 additions and 116 deletions

View File

@@ -2,9 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNet.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using AutoMapper; using AutoMapper;
using MusicStore.Models; using MusicStore.Models;
using MusicStore.Infrastructure; using MusicStore.Infrastructure;
@@ -97,7 +97,7 @@ namespace MusicStore.Apis
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
// Return the model errors // Return the model errors
return HttpBadRequest(ModelState); return BadRequest(ModelState);
} }
// Save the changes to the DB // Save the changes to the DB
@@ -119,7 +119,7 @@ namespace MusicStore.Apis
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
// Return the model errors // Return the model errors
return HttpBadRequest(ModelState); return BadRequest(ModelState);
} }
var dbAlbum = await _storeContext.Albums.SingleOrDefaultAsync(a => a.AlbumId == albumId); var dbAlbum = await _storeContext.Albums.SingleOrDefaultAsync(a => a.AlbumId == albumId);

View File

@@ -1,8 +1,8 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using MusicStore.Models; using MusicStore.Models;
namespace MusicStore.Apis namespace MusicStore.Apis

View File

@@ -1,7 +1,7 @@
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using MusicStore.Models; using MusicStore.Models;
using MusicStore.Infrastructure; using MusicStore.Infrastructure;

View File

@@ -1,5 +1,5 @@
using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
namespace MusicStore.Models namespace MusicStore.Models
{ {
@@ -7,7 +7,7 @@ namespace MusicStore.Models
public class MusicStoreContext : IdentityDbContext<ApplicationUser> public class MusicStoreContext : IdentityDbContext<ApplicationUser>
{ {
public MusicStoreContext() public MusicStoreContext(DbContextOptions options) : base(options)
{ {
} }

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Claims; using System.Security.Claims;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.OptionsModel; using Microsoft.Extensions.Options;
namespace MusicStore.Models namespace MusicStore.Models
{ {

View File

@@ -1,5 +1,5 @@
using Microsoft.AspNet.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@@ -1,4 +1,4 @@
using Microsoft.AspNet.Mvc; using Microsoft.AspNetCore.Mvc;
namespace MusicStore.Controllers namespace MusicStore.Controllers
{ {

View File

@@ -1,6 +1,6 @@
using Microsoft.AspNet.Mvc; using Microsoft.AspNetCore.Mvc;
using System; using System;
using Microsoft.AspNet.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
namespace MusicStore.Infrastructure namespace MusicStore.Infrastructure
{ {

View File

@@ -1,4 +1,4 @@
using Microsoft.Data.Entity; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
namespace MusicStore.Infrastructure namespace MusicStore.Infrastructure
{ {

View File

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MusicStore
{
public class SiteSettings
{
public string DefaultAdminUsername { get; set; }
public string DefaultAdminPassword { get; set; }
}
}

View File

@@ -1,10 +1,12 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNet.Authorization; using System.IO;
using Microsoft.AspNet.Builder; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNet.Hosting; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNetCore.Hosting;
using Microsoft.Data.Entity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@@ -17,39 +19,16 @@ namespace MusicStore
{ {
public class Startup public class Startup
{ {
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) // This method gets called by the runtime. Use this method to add services to the container.
{
// Setup configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ApplicationBasePath)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
// This method gets called by the runtime.
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
services.Configure<SiteSettings>(settings =>
{
settings.DefaultAdminUsername = Configuration["DefaultAdminUsername"];
settings.DefaultAdminPassword = Configuration["DefaultAdminPassword"];
});
// Add MVC services to the services container.
services.AddMvc(); services.AddMvc();
// Uncomment the following line to add Web API services which makes it easier to port Web API 2 controllers.
// You will also need to add the Microsoft.AspNet.Mvc.WebApiCompatShim package to the 'dependencies' section of project.json.
// services.AddWebApiConventions();
// Add EF services to the service container // Add EF services to the service container
services.AddEntityFramework() services.AddEntityFramework()
.AddSqlite() .AddEntityFrameworkSqlite()
.AddDbContext<MusicStoreContext>(options => { .AddDbContext<MusicStoreContext>(options => {
options.UseSqlite(Configuration["DbConnectionString"]); options.UseSqlite("Data Source=music-db.sqlite");
}); });
// Add Identity services to the services container // Add Identity services to the services container
@@ -77,41 +56,24 @@ namespace MusicStore
Mapper.CreateMap<GenreResultDto, Genre>(); Mapper.CreateMap<GenreResultDto, Genre>();
} }
// Configure is called after ConfigureServices is called. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
{
// Initialize the sample data
SampleData.InitializeMusicStoreDatabaseAsync(app.ApplicationServices).Wait();
loggerFactory.MinimumLevel = LogLevel.Warning;
loggerFactory.AddConsole();
loggerFactory.AddDebug();
// Configure the HTTP request pipeline.
// Add the platform handler to the request pipeline.
app.UseIISPlatformHandler();
// Add the following to the request pipeline only in development environment.
if (env.IsDevelopment())
{ {
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
}
else
{
// Add Error handling middleware which catches all application specific errors and
// send the request to the following path or controller action.
app.UseExceptionHandler("/Home/Error");
}
// Add static files to the request pipeline. // Initialize the sample data
//SampleData.InitializeMusicStoreDatabaseAsync(app.ApplicationServices).Wait();
app.UseStaticFiles(); app.UseStaticFiles();
loggerFactory.AddConsole();
// Add MVC to the request pipeline. // Add MVC to the request pipeline.
app.UseMvc(routes => app.UseMvc(routes =>
{ {
// Matches requests that correspond to an existent controller/action pair // Matches requests that correspond to an existent controller/action pair
routes.MapRoute("default", "{controller}/{action}/{id:int?}"); routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
// Matches any other request that doesn't appear to have a filename extension (defined as 'having a dot in the last URI segment'). // Matches any other request that doesn't appear to have a filename extension (defined as 'having a dot in the last URI segment').
// This means you'll correctly get 404s for /some/dir/non-existent-image.png instead of returning the SPA HTML. // This means you'll correctly get 404s for /some/dir/non-existent-image.png instead of returning the SPA HTML.
@@ -121,10 +83,20 @@ namespace MusicStore
// (which of course will match /customers/isaac.png too, so in that case it would serve the PNG image at that URL if one is on disk, // (which of course will match /customers/isaac.png too, so in that case it would serve the PNG image at that URL if one is on disk,
// or the SPA HTML if not). // or the SPA HTML if not).
routes.MapSpaFallbackRoute("spa-fallback", new { controller = "Home", action = "Index" }); routes.MapSpaFallbackRoute("spa-fallback", new { controller = "Home", action = "Index" });
// Uncomment the following line to add a route for porting Web API 2 controllers.
// routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
}); });
} }
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseDefaultHostingConfiguration(args)
.UseIISPlatformHandlerUrl()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
} }
} }

View File

@@ -1,4 +1,4 @@
@using MusicStore @using MusicStore
@using Microsoft.AspNet.AngularServices @using Microsoft.AspNet.AngularServices
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" @addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers"
@addTagHelper "*, Microsoft.AspNet.SpaServices" @addTagHelper "*, Microsoft.AspNet.AngularServices"

View File

@@ -1,3 +0,0 @@
{
"DbConnectionString": "Data Source=music-db.sqlite"
}

View File

@@ -1,21 +1,27 @@
{ {
"webroot": "wwwroot",
"version": "1.0.0-*", "version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true,
"warningsAsErrors": true,
"preserveCompilationContext": true
},
"tooling": { "tooling": {
"defaultNamespace": "MusicStore" "defaultNamespace": "MusicStore"
}, },
"dependencies": { "dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-rc1-*", "Microsoft.AspNetCore.Diagnostics": "1.0.0-*",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-*", "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-*",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-*", "Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-*",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-*", "Microsoft.AspNetCore.Mvc": "1.0.0-*",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-*", "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0-*",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-*", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-*", "Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-*", "Microsoft.Extensions.Configuration.Json": "1.0.0-*",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-*", "Microsoft.Extensions.Logging.Console": "1.0.0-*",
"EntityFramework.SQLite": "7.0.0-rc1-*", "Microsoft.NETCore.Platforms": "1.0.1-*",
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-*", "Microsoft.Extensions.Logging.Debug": "1.0.0-*",
"Microsoft.EntityFrameworkCore.SQLite": "1.0.0-*",
"Microsoft.AspNet.AngularServices": "1.0.0-*", "Microsoft.AspNet.AngularServices": "1.0.0-*",
"AutoMapper": "4.1.1" "AutoMapper": "4.1.1"
}, },
@@ -23,8 +29,15 @@
"web": "Microsoft.AspNet.Server.Kestrel" "web": "Microsoft.AspNet.Server.Kestrel"
}, },
"frameworks": { "frameworks": {
"dnx451": {}, "netstandardapp1.5": {
"dnxcore50": {} "imports": [
"dnxcore50",
"portable-net451+win8"
],
"dependencies": {
"NETStandard.Library": "1.5.0-*"
}
}
}, },
"exclude": [ "exclude": [
"wwwroot", "wwwroot",