1-) .Net 6 Core Web Api - .Net 6 Core Web Api Basit Kullanımı 2
net core 9 için swagger eklemek
Install-Package Swashbuckle.AspNetCore.Swagger Install-Package Swashbuckle.AspNetCore.SwaggerGen Install-Package Swashbuckle.AspNetCore.SwaggerUI
|
kaynak kodlar : https://github.com/ramazanhaber/NetCoreApiEgitim2
diger kaynak : https://jasonwatmore.com/net-7-dapper-postgresql-crud-api-tutorial-in-aspnet-core
SQL BAĞLANTI HATASI ALIRSAN BUNU ÇALIŞTIR
private void EnsureConnectionOpen() { if (context.State == ConnectionState.Closed) { context.Open(); } |
1. ADIM
2.ADIM
3.ADIM
4.ADIM TERMİNALE(PACKAGE MANAGER CONSOLE) YAZ VE ÇALIŞTIR
5.ADIM(Models diye klasör oluştur içine Kategoriler.cs oluştur ve aşağıdakini yaz)
using System.ComponentModel.DataAnnotations;
namespace NetCoreApiEgitim1.Models { public class Kategoriler { [Key] public int id { get; set; } public string? ad { get; set; } public bool? aktif { get; set; } } } |
6.ADIM(Entities diye klasör oluştur içine Context.cs oluştur ve aşağıdakini yaz)
using Microsoft.EntityFrameworkCore; using NetCoreApiEgitim1.Models;
namespace NetCoreApiEgitim1.Entities { public class Context : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=RAMBO3;Initial Catalog=Deneme;User ID=sa;Password=şifre;TrustServerCertificate=True"); } public DbSet<Kategoriler> Kategoriler { get; set; }
} }
|
7.ADIM -> Program.cs yi komple aşağıdaki kodu yapıştır
var builder = WebApplication.CreateBuilder(args);
// Add services to the container. builder.Services.AddCors(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<Context>();// veri tabanı bağlantı yeri var app = builder.Build();
//app.UseCors(builder => builder //.AllowAnyHeader() //.AllowAnyMethod() //.SetIsOriginAllowed((host) => true) //.AllowCredentials() //);
app.UseCors(builder => builder .AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin() .SetPreflightMaxAge(TimeSpan.FromDays(10)) );
if (app.Environment.IsDevelopment() || app.Environment.IsProduction()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapi v1"); }); }
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
|
8.ADIM
9.ADIM(EKLE SİL GÜNCELLE LİSTELE)
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using NetCoreApiEgitim1.Entities; using NetCoreApiEgitim1.Models; using Newtonsoft.Json; using System.Data; namespace NetCoreApiEgitim1.Controllers { [Route("api/[controller]")] [ApiController] public class KategorilerController : ControllerBase { [HttpGet] [Route("getKategoriler")] public IActionResult getKategoriler() { using var context= new Context(); var values = context.Kategoriler.ToList(); return Ok(values); }
[HttpPost] [Route("addKategoriler")] public IActionResult addKategoriler(Kategoriler kategori) { using var context= new Context(); context.Add(kategori); context.SaveChanges(); return Ok(); }
[HttpPost] [Route("updateKategoriler")] public IActionResult updateKategoriler(Kategoriler kategori) { using var context= new Context(); context.Update(kategori); context.SaveChanges(); return Ok(); }
[HttpPost] [Route("deleteKategoriler")] public IActionResult deleteKategoriler(int id) { using var context= new Context(); Kategoriler kategoriler = new Kategoriler(); kategoriler.id = id; context.Remove(kategoriler); context.SaveChanges(); return Ok(); }
[HttpGet] [Route("getKategorilerJoin")] public IActionResult getKategorilerJoin() { using var context= new Context(); string query = @"select Kategoriler.ad,kategoriId,Urunler.ad,Urunler.id as urunId from Urunler left join Kategoriler on Kategoriler.id=Urunler.kategoriId";
var data = getQueryToDataTable(query, context);
string json = JsonConvert.SerializeObject(data);
return Ok(json); }
[ApiExplorerSettings(IgnoreApi = true)] [NonAction] public DataTable getQueryToDataTable(string query, DbContext context) { DataTable dt = new DataTable(); try { using (var cmd = context.Database.GetDbConnection().CreateCommand()) { cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = query; SqlDataAdapter da = new SqlDataAdapter((SqlCommand)cmd); da.Fill(dt); } } catch (Exception ex) { } return dt; }
} }
|
10.ADIM -> SQL'İ appsettings.json dan okuma
1. appsettings.json (ConnectionStrings eklenir)
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*",
"ConnectionStrings": { "con1": "Data Source=RAMBO3;Initial Catalog=POSDB;User ID=sa;Password=123;TrustServerCertificate=True;MultipleActiveResultSets=True;" } }
|
2. Context.cs
using Microsoft.EntityFrameworkCore; using NetCoreApiEgitim2.Models;
namespace NetCoreApiEgitim2.Entities { public class Context : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json") .Build();
string? con1 = configuration.GetConnectionString("con1");
optionsBuilder.UseSqlServer(con1); } public DbSet<Kategoriler> Kategoriler { get; set; }
}}
|
11.ADIM (App setting den farklı şekilde connection string okumak için)
Context.cs
public class Context : DbContext
{
public Context(DbContextOptions<Context> opt) : base(opt)
{}}
program.cs
builder.Services.AddDbContext<Context>(opt =>
{
opt.UseSqlServer(builder.Configuration.GetConnectionString("Local"));
});
appsetting.json
{
"ConnectionStrings": { "Local": "Server=OZO;Database=ModulApp;Uid=sa;Pwd=1;" },
"Logging": {
12.ADIM
SON OLARAK İİS KURULUMU .NET 6
BURADAN İNDİR | https://drive.google.com/file/d/1HH3dfMpVXy3voW88cEUznRmKM-JJMV0I/view?usp=sharing
|
VEYA BURADAN İNDİR |
https://dotnet.microsoft.com/en-us/download/dotnet/6.0
|
|
MOBİLEDEN ULAŞIP TEST İÇİN KULLANMAK İÇİN conveyer olarak extension yükle
projende debug yapmak için : https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti kaynak : https://www.youtube.com/watch?v=9ixt9bdAHs8&ab_channel=Asfendyar
|
AYRICA BAKINIZ iis swagger getirme kaynak
https://stackoverflow.com/questions/62397386/swagger-ui-not-displaying-when-deploying-api-on-iis
13.ADIM
13.ADIM -> ÖNEMLİ -> api core double'lar nokta olur
var app = builder.Build();
var supportedCultures = new[] { "en-GB", "fr", "de" }; var localizationOptions = new RequestLocalizationOptions() .SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);
|
**************** MYSQL İÇİN BAĞLANTISI *****************
proje linki : https://drive.google.com/file/d/17WgBMC2Y5zBqV3f-KlEV9zXksFq_lABI/view?usp=sharing github linki : https://github.com/ramazanhaber/NetCore_6.0_MysqlApi
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 7.0.0 Install-Package Microsoft.EntityFrameworkCore -Version 7.0.1 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 7.0.1 Install-Package Newtonsoft.Json -Version 13.0.3
|
1- Context.cs düzeltilir
using Microsoft.EntityFrameworkCore; using MysqlApi.Models;
namespace MysqlApi.Entities { public class Context : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { string connectionString = "server=localhost;port=3306;database=uzaktan_aydinlatma;user=root;password=sapass;"; optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); } public DbSet<tbl_log> tbl_log { get; set; } } }
|
2- YeniController.cs
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MysqlApi.Entities; using MysqlApi.Models; using MySqlConnector; using Newtonsoft.Json; using System.Data;
namespace MysqlApi.Controllers { [Route("api/[controller]")] [ApiController] public class YeniController : ControllerBase { [HttpGet] [Route("getKategoriler")] public IActionResult getKategoriler() { using var context = new Context(); var values = context.tbl_log.ToList(); return Ok(values); }
[HttpPost] [Route("PostKategoriler")] public IActionResult PostKategoriler(tbl_log log) { using var context = new Context(); var values = context.tbl_log.Add(log); context.SaveChanges(); return Ok(log); }
[HttpPut] [Route("PutKategoriler")] public IActionResult PutKategoriler(int id) { using var context = new Context(); var values = context.tbl_log.Where(x=>x.id == id).ToList(); // context.SaveChanges(); return Ok(values); }
[HttpGet] [Route("getKategoriler2")] public IActionResult getKategoriler2(int id) { using var context = new Context(); var values = getQueryToDataTable("SELECT * FROM uzaktan_aydinlatma.tbl_log where id="+id+";", context); // context.SaveChanges(); return Ok(JsonConvert.SerializeObject(values)); }
[ApiExplorerSettings(IgnoreApi = true)] [NonAction] public DataTable getQueryToDataTable(string query, DbContext context) { DataTable dt = new DataTable(); try { using (var cmd = context.Database.GetDbConnection().CreateCommand()) { cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = query; MySqlDataAdapter da = new MySqlDataAdapter((MySqlCommand)cmd); da.Fill(dt); } } catch (Exception ex) { } return dt; } } }
|
3- tbl_log.cs
using System.ComponentModel.DataAnnotations;
namespace MysqlApi.Models { public class tbl_log { [Key] public int id { get; set; } public int? kul_id { get; set; } public string? yapilan_islem { get; set; } public DateTime? tarih { get; set; } } }
|