Esempio n. 1
0
        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");
            });
        }
Esempio n. 2
0
        // 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();
            });
        }
Esempio n. 3
0
        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");
            });
        }