<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      net Core做一個webApi的簡單實例

      用NetCore 和Dapper 和mySql做一個簡單的實例,

      一準備工作

      1:VS2017+windos系統,也可以用其他的操作系統和工具

      2:一臺Cenetos的虛擬機或者虛擬機

      二:開始

      1:用微軟官方的netCore的ToDo項目改造,項目的主體結構如下圖,源連接

      https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api

       

      1:打開Nuget控制臺,安裝 MySQL官方.NET Core驅動,并且支持 EF Core

       >Install-Package SapientGuardian.MySql.Data -Pre

      2:打開Nuget控制臺,安裝Dapper

      >Install-Package Dapper -Pre

      3:在Models文件夾下新建ToDoItem 的實體

       public class ToDoItem
          {
              [Required]
              public string ID { get; set; }
      
              [Required]
              public string Name { get; set; }
      
              [Required]
              public string Notes { get; set; }
      
              public bool Done { get; set; }
          }
      

      4:在appsettings.json里面配置MySql的數據庫連接字符串,然后點開appsettings.json的屬性將“復制到輸出目錄”項的值改為“始終復制”,

      SslMode=none的作用是解決連接的時候報SSL錯誤的
        "ConnectionStrings": {
          "SqlServerConnection": "Server=(LocalDb)\\MSSQLLocalDB, Database=test",
          "MySqlConnection": "Server=自己的服務器;Database=test;User ID=root;Password=111111;SslMode=none"
        }
      

       5:在Common下面新建一個AppConfigurtaionServices的類,用于讀取appsettings.json里面的連接字符串(appsettings.json屬性如果沒有選中始終復制,在代碼運行的時候,

      IConfiguration 會報錯

      )

      public class AppConfigurtaionServices
          {
              public static IConfiguration Configuration { get; set; }
              static AppConfigurtaionServices()
              {
                  Configuration = new ConfigurationBuilder()
                  .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
                  .Build();
              }
          }
      

      6:新建一個Interfaces文件夾,然后下面建一個IToDoRepository的接口類

       public interface IToDoRepository
          {
              bool DoesItemExist(string id);
              IEnumerable<ToDoItem> All();
              ToDoItem Find(string id);
              int Insert(ToDoItem item);
              int Update(ToDoItem item);
              int Delete(string id);
          }
      

        

      7:新建一個Services然后下面新建ToDoRepository類 是我們的數據倉儲類 記得要引用(using Dapper;和 using MySql.Data.MySqlClient;)

       public class ToDoRepository : IToDoRepository
          {
              private  static  string DefaultSqlConnectionString = "";
              public ToDoRepository()
              {
                  DefaultSqlConnectionString = AppConfigurtaionServices.Configuration.GetConnectionString("MySqlConnection"); 
          
              }
              public static IDbConnection GetSqlConnection(string sqlConnectionString = null)
              {
                  if (string.IsNullOrWhiteSpace(sqlConnectionString))
                  {
                      sqlConnectionString = DefaultSqlConnectionString;
                  }
                  IDbConnection conn = new MySqlConnection(sqlConnectionString);
                  conn.Open();
                  return conn;
              }
              /// <summary>
              /// 獲取全部
              /// </summary>
              /// <returns></returns>
              public IEnumerable<ToDoItem> All()
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      string strsql = "select * from ToDoItem";
                      return conn.Query<ToDoItem>(strsql, null);
                  }
              }
      
              /// <summary>
              /// 查詢是否存在
              /// </summary>
              /// <param name="id"></param>
              /// <returns></returns>
              public bool DoesItemExist(string id)
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      int cout = conn.Query<int>("select count(*) from ToDoItem where  ID=@ID", new { ID = id }).FirstOrDefault();
                      if (cout > 0)
                          return true;
                      else
                          return false;
                  }
              }
              /// <summary>
              /// 刪除
              /// </summary>
              /// <param name="id"></param>
              /// <returns></returns>
              public int Delete(string id)
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      string strsql = "DELETE from ToDoItem where ID=@ID";
                      return conn.Execute(strsql, new { ID = id });
                  }
      
              }
      
              /// <summary>
              /// 查詢整個對象
              /// </summary>
              /// <param name="id"></param>
              /// <returns></returns>
              public ToDoItem Find(string id)
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      string strsql = "select * from  ToDoItem where ID=@ID";
                      return conn.Query<ToDoItem>(strsql, new { ID = id }).FirstOrDefault();
                  }
              }
              /// <summary>
              /// 新增項
              /// </summary>
              /// <param name="item"></param>
              /// <returns></returns>
              public int Insert(ToDoItem item)
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      string strsql = "INSERT into ToDoItem(ID,Name,Notes,Done)values(@ID,@Name,@Notes,@Done)";
                      return conn.Execute(strsql, item);
                  }
              }
      
              /// <summary>
              /// 修改
              /// </summary>
              /// <param name="item"></param>
              /// <returns></returns>
              public int Update(ToDoItem item)
              {
                  using (IDbConnection conn = GetSqlConnection())
                  {
                      string strsql = " UPDATE ToDoItem SET Name=@Name,Notes=@Notes,Done=@Done where ID=@ID";
                      return conn.Execute(strsql, item);
                  }
              }
      
           
      
          }
      

       8:在Controller下面新增一個ToDoItemsController的控制器,記得添加相關的命名空間

       [Route("api/[controller]")]
          public class ToDoItemsController : Controller
          {
              private readonly IToDoRepository _toDoRepository;
      
              public ToDoItemsController(IToDoRepository toDoRepository)
              {
                  _toDoRepository = toDoRepository;
              }
      
              /// <summary>
              /// 獲取數據
              /// </summary>
              /// <returns></returns>
              [HttpGet]
              public IActionResult List()
              {
                  return Ok(_toDoRepository.All());
              }
              /// <summary>
              /// 新增項
              /// </summary>
              /// <param name="item"></param>
              /// <returns></returns>
              [HttpPost]
              public IActionResult Create([FromBody] ToDoItem item)
              {
                  try
                  {
                      if (item == null || !ModelState.IsValid)
                      {
                          return BadRequest("沒有通過驗證");
                      }
                      bool itemExists = _toDoRepository.DoesItemExist(item.ID);
                      if (itemExists)
                      {
                          return StatusCode(StatusCodes.Status409Conflict, "已經存在此項");
                      }
                      _toDoRepository.Insert(item);
                  }
                  catch (Exception)
                  {
                      return BadRequest("創建失敗");
                  }
      
                  return Ok(item);
              }
      
              /// <summary>
              /// 修改項
              /// </summary>
              /// <param name="item"></param>
              /// <returns></returns>
              [HttpPut]
              public IActionResult Edit([FromBody] ToDoItem item)
              {
                  try
                  {
                      if(item==null || !ModelState.IsValid)
                          return BadRequest("沒有通過必填驗證");
                      var existingItem = _toDoRepository.Find(item.ID);
                      if(existingItem==null)
                      {
                          return NotFound("沒有發現此記錄");
                      }
                      _toDoRepository.Update(item);
                  }
                  catch(Exception)
                  {
                      return BadRequest("修改失敗");
                  }
                  return NoContent();
              }
      
              /// <summary>
              /// 刪除
              /// </summary>
              /// <param name="id"></param>
              /// <returns></returns>
              [HttpDelete("{id}")]
              public IActionResult Delete(string id)
              {
                  try
                  {
                      var item = _toDoRepository.Find(id);
                      if (item == null)
                          return NotFound("沒有此記錄");
                      _toDoRepository.Delete(id);
                  }
                  catch(Exception )
                  {
                      return BadRequest("刪除失敗");
                  }
      
                  return NoContent();
              }
      
           
      
          }
      

       9:在ConfigureServices里配置IToDoRepository 和ToDoRepository服務

         services.AddSingleton<IToDoRepository, Services.ToDoRepository>();
      

       10:配置Swagger(絲襪哥)具體Swagger的基礎知識可以連接到

      https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs=visual-studio
      

      10.1:在Nuget控制臺添加引用

         >Install-Package Swashbuckle.AspNetCore

      10.2:在Startup類中配置Swagger

      10.2.1:在ConfigureServices方法里面添加Swagger服務

          //添加Swagger服務
                  services.AddSwaggerGen(c =>
                  {
                      c.SwaggerDoc("v1", new Info
                      {
                          Version = "v1",
                          Title = "ToDo API",
                          Description = "A simple example ASP.NET Core Web API",
                          TermsOfService = "None",
                          Contact = new Contact { Name = "Shayne Boyer", Email = "", Url = "https://twitter.com/spboyer" },
                          License = new License { Name = "Use under LICX", Url = "https://example.com/license" }
                      });
      
                      var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                      var xmlPath = Path.Combine(basePath, "ToDoApi.xml");
                      c.IncludeXmlComments(xmlPath);
                  });
      

        10.2.2:在Configure配置Swagger服務

      app.UseSwagger();
      //配置Swagger服務
      app.UseSwaggerUI(c =>
      {
       c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
      });
      

       10.3:最終的Startup類如下

      using Microsoft.AspNetCore.Builder;
      using Microsoft.AspNetCore.Hosting;
      using Microsoft.Extensions.Configuration;
      using Microsoft.Extensions.DependencyInjection;
      using Microsoft.Extensions.PlatformAbstractions;
      using Swashbuckle.AspNetCore.Swagger;
      using System.IO;
      using ToDoApi.Interfaces;
      
      namespace ToDoApi
      {
          public class Startup
          {
              public Startup(IConfiguration configuration)
              {
                  Configuration = configuration;
              }
      
              public IConfiguration Configuration { get; }
      
              //添加服務
              public void ConfigureServices(IServiceCollection services)
              {
                  services.AddMvc();
         
                  //添加Swagger服務
                  services.AddSwaggerGen(c =>
                  {
                      c.SwaggerDoc("v1", new Info
                      {
                          Version = "v1",
                          Title = "ToDo API",
                          Description = "A simple example ASP.NET Core Web API",
                          TermsOfService = "None",
                          Contact = new Contact { Name = "Shayne Boyer", Email = "", Url = "https://twitter.com/spboyer" },
                          License = new License { Name = "Use under LICX", Url = "https://example.com/license" }
                      });
      
                      var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                      var xmlPath = Path.Combine(basePath, "ToDoApi.xml");
                      c.IncludeXmlComments(xmlPath);
                  });
                  services.AddSingleton<IToDoRepository, Services.ToDoRepository>();
              }
      
              // 配置服務
              public void Configure(IApplicationBuilder app, IHostingEnvironment env)
              {
                  app.UseSwagger();
                  //配置Swagger服務
                  app.UseSwaggerUI(c =>
                  {
                      c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                  });
                  //配置開發環境
                  if (env.IsDevelopment())
                  {
                      app.UseDeveloperExceptionPage();
                  }
      
                  app.UseMvc();
              }
          }
      }
      

      10.4:啟動項設置為swagger啟動 

      在launchSettings.json做如下修改

      這樣你的項目用IIS Express啟動來就是swagger界面

      11:最終效果

      11.2:測試獲取數據的方法

      12:對NetCore的理解還很淺,只是做了一個簡單的demo希望能幫到你,只是寫了mysql的,如果是要用SqlServer,則修改讀取SqlServerConnection的數據連接然后把數據倉儲里面的 MySql.Data.MySqlClien改成Sql server的就可以了

       13:demo連接:

      https://files.cnblogs.com/files/gouguo/ToDoApi.rar
      

        

      posted @ 2018-04-28 14:14  忘-語  閱讀(938)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久亚洲精品情侣| 少妇愉情理伦片丰满丰满午夜| 天堂a无码a无线孕交| 亚洲第一国产综合| 亚洲精品一区二区制服| 亚洲欧美日韩综合一区二区| 亚洲无线看天堂av| 亚洲国产在一区二区三区| 99热门精品一区二区三区无码| 人妻另类 专区 欧美 制服| 精品国产一区二区三区蜜臀| 亚洲国产高清av网站| 国产精品毛片av999999| 国内精品综合九九久久精品| 国产综合视频一区二区三区 | 黑人玩弄人妻中文在线| 91人妻熟妇在线视频| 国产精品色哟哟在线观看| 国产亚洲精品第一综合| 成人无码一区二区三区网站| 国产精品国产精品一区精品 | 武威市| 无码一区中文字幕| 综合激情网一区二区三区| 里番全彩爆乳女教师| 99久久亚洲综合精品成人| 国产一区二区不卡自拍| 景宁| 久热这里只有精品视频3| 亚洲成av人片无码不卡播放器| 116美女极品a级毛片| 国产精品久久久久久久久久直播| 日本免费人成视频在线观看| 人妻精品动漫H无码中字| 久久国产国内精品国语对白| 色综合视频一区二区三区| 久热这里只国产精品视频| 精品人妻中文字幕在线| 亚洲免费观看视频| 日本视频一区二区三区1| 日韩国产成人精品视频|