public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Use((context, next) => { context.RequestServices.GetRequiredService <CatsDbContext>().Database.Migrate(); return(next()); }); // use static files app.UseStaticFiles(); // set usage of html app.Use((context, next) => { context.Response.Headers.Add("Content-Type", "text/html"); return(next()); }); // home app.MapWhen( ctx => ctx.Request.Path.Value == "/" && ctx.Request.Method == HttpMethods.Get, home => { home.Run(async context => { await context.Response.WriteAsync($"<h1>{env.ApplicationName}</h1>"); var db = context.RequestServices.GetService <CatsDbContext>(); var cats = db.Cats .Select(cat => new { cat.Id, cat.Name }) .ToList(); await context.Response.WriteAsync("<ul>"); foreach (var cat in cats) { await context.Response.WriteAsync($@"<li><a href = ""/cat/{cat.Id}"">{cat.Name}</a></li>"); } await context.Response.WriteAsync("</ul>"); await context.Response.WriteAsync(@" <form action=""/cat/add""> <input type = ""submit"" value = ""Add cat""/> </form>"); }); }); // cat/add app.MapWhen(req => req.Request.Path.Value == "/cat/add", catAdd => { catAdd.Run(async(context) => { if (context.Request.Method == HttpMethods.Get) { await context.Response.WriteAsync("<h1>Add Cat</h1>"); await context.Response.WriteAsync( @"<form method=""post"" action=""/cat/add""> <label for=""Name"">Name:</label> <input type= ""text"" name=""Name"" id=""Name""/> </br> <label for=""Age"">Age:</label> <input type= ""number"" name=""Age"" id=""Age""/> </br> <label for=""Breed"">Breed:</label> <input type= ""text"" name=""Breed"" id=""Breed""/> </br> <label for=""ImageUrl"">ImageUrl:</label> <input type= ""text"" name=""ImageUrl"" id=""ImageUrl""/> </br> <input type=""submit"" value=""Add Cat""/> </form>"); } // add cat to db else if (context.Request.Method == HttpMethods.Post) { var db = context.RequestServices.GetService <CatsDbContext>(); var formData = context.Request.Form; var cat = new Cat { Name = formData["Name"], Age = int.Parse(formData["Age"]), Breed = (Breed)Enum.Parse(typeof(Breed), formData["Breed"]), ImageUrl = formData["ImageUrl"] }; db.Add(cat); await db.SaveChangesAsync(); context.Response.Redirect("/"); } }); // show cat app.MapWhen( ctx => ctx.Request.Path.Value.StartsWith("/cat") && ctx.Request.Method == HttpMethods.Get, catDetails => { catDetails.Run(async(context) => { var urlParts = context.Request.Path.Value.Split("/", StringSplitOptions.RemoveEmptyEntries); var catId = int.Parse(urlParts[1]); var db = context.RequestServices.GetService <CatsDbContext>(); var cat = await db.Cats.FindAsync(catId); await context.Response.WriteAsync($"<h1>{cat.Name}</h1>"); await context.Response.WriteAsync($@"<img src=""{cat.ImageUrl}"" alt=""{cat.Name}"" width=""300""/>"); await context.Response.WriteAsync($"<p>Age:{cat.Age}</p>"); await context.Response.WriteAsync($"<p>Breed:{cat.Breed}</p>"); }); } ); }); app.Run(async(context) => { context.Response.StatusCode = 404; await context.Response.WriteAsync("404 page not found"); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { using (AppDbContext dbContext = new AppDbContext()) { dbContext.Database.EnsureCreated(); } if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.Run(async(context) => { string requestPath = context.Request.Path.ToString(); string requestMethod = context.Request.Method.ToUpper(); if (requestPath.Equals("/")) { await context.Response.WriteAsync(@"<h1>FDMC</h1>"); using (AppDbContext dbContext = new AppDbContext()) { IList <Cat> cats = dbContext.Cats.ToList(); await context.Response.WriteAsync(@"<ul>"); foreach (Cat cat in cats) { await context.Response.WriteAsync(@$ "<li><a href=" "/cat/{cat.Id}" ">{cat.Name}</a></li>"); } await context.Response.WriteAsync(@"</ul>"); } await context.Response.WriteAsync(@" <form method=""get"" action=""/cat/add""> <input type=""submit"" value=""Add Cat""> </form>"); } else if (requestPath.Equals("/cat/add") && requestMethod.Equals("GET")) { await context.Response.WriteAsync(@"<h1>Add Cat</h1>"); await context.Response.WriteAsync(@" <form method=""post"" action=""/cat/add""> <div > <label>Name</label> <input type=""text"" name=""name""> </div> <div > <label>Age</label> <input type=""number"" name=""age""> </div> <div > <label>Breed</label> <input type=""text"" name=""breed""> </div> <div > <label>Image Url</label> <input type=""text"" name=""image-url""> </div> <div> <input type=""submit"" value=""Add Cat""> </div> </form>"); } else if (requestPath.Equals("/cat/add") && requestMethod.Equals("POST")) { string catName = context.Request.Form["name"]; int catAge = int.Parse(context.Request.Form["age"]); string catBreed = context.Request.Form["breed"]; string catImageUrl = context.Request.Form["image-url"]; using (AppDbContext dbContext = new AppDbContext()) { dbContext.Cats.Add(new Cat { Name = catName, Age = catAge, Breed = catBreed, ImageUrl = catImageUrl }); dbContext.SaveChanges(); } context.Response.Redirect("/"); } else if (requestPath.StartsWith("/cat") && char.IsDigit(requestPath.Split("/", System.StringSplitOptions.RemoveEmptyEntries)[1][0])) { int catId = int.Parse(requestPath.Split("/", System.StringSplitOptions.RemoveEmptyEntries)[1]); using (AppDbContext dbContext = new AppDbContext()) { Cat cat = dbContext.Cats.FirstOrDefault(c => c.Id == catId); await context.Response.WriteAsync(@$ "<h1>{cat.Name}</h1>"); await context.Response.WriteAsync(@$ "<img src=" "{cat.ImageUrl}" " style=" "max-width: 300px;" " />"); await context.Response.WriteAsync(@$ "<p>Age: {cat.Age}</p>"); await context.Response.WriteAsync(@$ "<p>Breed: {cat.Breed}</p>"); } } }); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UserDatabaseMigration(); app.UseStaticFiles(); app.UseHttpMethodOverride(); app.MapWhen(ctx => ctx.Request.Path.Value == "/" && ctx.Request.Method == "GET", home => { home.Run(async(context) => { await context.Response.WriteAsync($"<h1>{env.ApplicationName}</h1>"); var db = context.RequestServices.GetService <CatDbContext>(); using (db) { var catData = db.Cats .Select(c => new { c.Id, c.Name }) .ToList(); await context.Response.WriteAsync("<ul>"); foreach (var cat in catData) { await context.Response.WriteAsync($@"<li><a href=""/cat/{cat.Id}"">{cat.Name}</a></li>"); } await context.Response.WriteAsync("</ul>"); await context.Response.WriteAsync(@" <form action=""/cat/add""> <input type = ""submit"" value=""Add Cat"" /> </form>"); } }); }); app.MapWhen(req => req.Request.Path.Value == "/cat/add", catAdd => { catAdd.Run(async(context) => { if (context.Request.Method == "GET") { context.Response.StatusCode = 302; context.Response.Headers.Add("Location", "/cats-add-form.html"); } else if (context.Request.Method == "POST") { var formData = context.Request.Form; var age = 0; int.TryParse(formData["Age"], out age); Cat cat = new Cat { Name = formData["Name"], Age = age, Breed = formData["Breed"], ImageUrl = formData["ImageUrl"], }; try { if (string.IsNullOrWhiteSpace(cat.Name) || string.IsNullOrWhiteSpace(cat.Breed) || string.IsNullOrWhiteSpace(cat.ImageUrl)) { throw new InvalidOperationException("Wrong cat data"); } var db = context.RequestServices.GetService <CatDbContext>(); using (db) { db.Add(cat); await db.SaveChangesAsync(); context.Response.StatusCode = 302; context.Response.Headers.Add("Location", "/"); } } catch (Exception) { await context.Response.WriteAsync("<h2>Invalid cat data!</h2>"); await context.Response.WriteAsync(@"<a href=""/cat/add"">Back to the form</a>"); } } }); }); app.MapWhen(ctx => ctx.Request.Path.Value.StartsWith("/cat") && ctx.Request.Method == "GET", catDetail => { catDetail.Run(async(context) => { var urlParts = context.Request.Path.Value.Split('/', StringSplitOptions.RemoveEmptyEntries); if (urlParts.Length < 2) { context.Response.Redirect("/"); } else { var catId = 0; int.TryParse(urlParts[1], out catId); if (catId == 0) { context.Response.Redirect("/"); return; } var db = context.RequestServices.GetService <CatDbContext>(); using (db) { var cat = await db.Cats.FindAsync(catId); if (cat == null) { context.Response.Redirect("/"); return; } await context.Response.WriteAsync($@"<h1>{cat.Name}</h1> <img src=""{cat.ImageUrl}"" width=""300""/> <p>Age: {cat.Age} </p> <p>Breed: {cat.Breed} </p>"); } } }); }); app.Run(async(context) => { context.Response.StatusCode = 404; await context.Response.WriteAsync("404"); }); }