初识ASP.NET CORE

  • 2020 年 3 月 31 日
  • 笔记

首先创建一个asp.net core web应用程序

 第二步

目前官方预置了7种模板项目供我们选择。从中我们可以看出,既有我们熟悉的MVC、WebAPI,又新添加了Razor Page,以及结合比较流行的Angular、React前端框架的模板项目。

空项目模板

Program.cs

using System;  using System.Collections.Generic;  using System.IO;  using System.Linq;  using System.Threading.Tasks;  using Microsoft.AspNetCore;  using Microsoft.AspNetCore.Hosting;  using Microsoft.Extensions.Configuration;  using Microsoft.Extensions.Logging;    namespace WebApplication6  {      public class Program      {          public static void Main(string[] args)          {              CreateWebHostBuilder(args).Build().Run();          }            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>              WebHost.CreateDefaultBuilder(args)                  .UseStartup<Startup>();      }  }

实质就是控制台应用

Startup.cs

using System;  using System.Collections.Generic;  using System.Linq;  using System.Threading.Tasks;  using Microsoft.AspNetCore.Builder;  using Microsoft.AspNetCore.Hosting;  using Microsoft.AspNetCore.Http;  using Microsoft.AspNetCore.HttpsPolicy;  using Microsoft.AspNetCore.Mvc;  using Microsoft.Extensions.Configuration;  using Microsoft.Extensions.DependencyInjection;    namespace WebApplication6  {      public class Startup      {          public Startup(IConfiguration configuration)          {              Configuration = configuration;          }            public IConfiguration Configuration { get; }            // This method gets called by the runtime. Use this method to add services to the container.          public void ConfigureServices(IServiceCollection services)          {              services.Configure<CookiePolicyOptions>(options =>              {                  // This lambda determines whether user consent for non-essential cookies is needed for a given request.                  options.CheckConsentNeeded = context => true;                  options.MinimumSameSitePolicy = SameSiteMode.None;              });                  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);          }            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.          public void Configure(IApplicationBuilder app, IHostingEnvironment env)          {              if (env.IsDevelopment())              {                  app.UseDeveloperExceptionPage();              }              else              {                  app.UseExceptionHandler("/Error");                  app.UseHsts();              }                app.UseHttpsRedirection();              app.UseStaticFiles();              app.UseCookiePolicy();                app.UseMvc();          }      }  }

提供最原始的HttpContext

Web API

创建完整的HTTP服务,使用Controller处理请求,仅返回数据无视图返回

using System;  using System.Collections.Generic;  using System.Linq;  using System.Threading.Tasks;  using Microsoft.AspNetCore.Mvc;    namespace WebApplication7.Controllers  {      [Route("api/[controller]")]      [ApiController]      public class ValuesController : ControllerBase      {          // GET api/values          [HttpGet]          public ActionResult<IEnumerable<string>> Get()          {              return new string[] { "value1", "value2" };          }            // GET api/values/5          [HttpGet("{id}")]          public ActionResult<string> Get(int id)          {              return "value";          }            // POST api/values          [HttpPost]          public void Post([FromBody] string value)          {          }            // PUT api/values/5          [HttpPut("{id}")]          public void Put(int id, [FromBody] string value)          {          }            // DELETE api/values/5          [HttpDelete("{id}")]          public void Delete(int id)          {          }      }  } 

Startup.cs也加入了相关的MVC的服务和中间件

using System;  using System.Collections.Generic;  using System.Linq;  using System.Threading.Tasks;  using Microsoft.AspNetCore.Builder;  using Microsoft.AspNetCore.Hosting;  using Microsoft.AspNetCore.Http;  using Microsoft.AspNetCore.HttpsPolicy;  using Microsoft.AspNetCore.Mvc;  using Microsoft.Extensions.Configuration;  using Microsoft.Extensions.DependencyInjection;    namespace WebApplication6  {      public class Startup      {          public Startup(IConfiguration configuration)          {              Configuration = configuration;          }            public IConfiguration Configuration { get; }            // This method gets called by the runtime. Use this method to add services to the container.          public void ConfigureServices(IServiceCollection services)          {              services.Configure<CookiePolicyOptions>(options =>              {                  // This lambda determines whether user consent for non-essential cookies is needed for a given request.                  options.CheckConsentNeeded = context => true;                  options.MinimumSameSitePolicy = SameSiteMode.None;              });                  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);          }            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.          public void Configure(IApplicationBuilder app, IHostingEnvironment env)          {              if (env.IsDevelopment())              {                  app.UseDeveloperExceptionPage();              }              else              {                  app.UseExceptionHandler("/Error");                  app.UseHsts();              }                app.UseHttpsRedirection();              app.UseStaticFiles();              app.UseCookiePolicy();                app.UseMvc();          }      }  }

Web 应用程序-Razor Page

在ASP.NET MVC中Razor作为一个高级视图引擎存在,Razor提供了一种新的标记语义,其大大减少了用户输入且具有表现力,主要的特点是使用@符号去书写标记。 而在ASP.NET Core中Razor不仅仅是一种视图引擎,其提供了一种新的页面设计方式——Razor Page。其主要的特点在于:

  • 基于文件路径的路由系统;
  • Razor Page类似于WebForm,一种MVVM的架构,支持双向绑定;
  • Razor Page符合单一职责原则,每个页面独立存在,视图和代码紧密组织在一起。

Web 应用程序-MVC

using System;  using System.Collections.Generic;  using System.Diagnostics;  using System.Linq;  using System.Threading.Tasks;  using Microsoft.AspNetCore.Mvc;  using WebApplication5.Models;    namespace WebApplication5.Controllers  {      public class HomeController : Controller      {          public IActionResult Index()          {              return View();          }            public IActionResult About()          {              ViewData["Message"] = "Your application description page.";                return View();          }            public IActionResult Contact()          {              ViewData["Message"] = "Your contact page.";                return View();          }            public IActionResult Privacy()          {              return View();          }            [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]          public IActionResult Error()          {              return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });          }      }  }