ExceptionMiddleware
Bu Dökümantasyon da WepAPI returnlerinin Startup clasına eklenecek olan bir Middleware ile yönetilmesi anlatılmıştır.
Extensions folderının içeirine aşağıdaki classlar açılır
Claslaın içleri şu şekildedir.
// DtResponse
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BSS_B2B_API.Extensions.ResponseModel
{
public class DtResponse<T>
{
public bool IsSuccess { get; set; } = true;
public string Message { get; set; }
public T Data { get; set; }
}
}
// DtResponseList
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BSS_B2B_API.Extensions.ResponseModel
{
public class DtResponseList<T>
{
public bool IsSuccess { get; set; } = true;
public string Message { get; set; }
public List<T> Data { get; set; }
}
}
//ErorDetails
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BSS_B2B_API.Extensions
{
public class ErorDetails
{
public bool IsSuccess { get; set; }
public string Message { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
}
//ExceptionMiddleware
using BSS_B2B_API.Extensions.ResponseModel;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
namespace BSS_B2B_API.Extensions
{
public class ExceptionMiddleware
{
private RequestDelegate _next;
public ExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext)
{
DtResponseList<object> result = new();
try
{
await _next(httpContext);
}
catch (Exception e)
{
await HandleExceptionAsync(httpContext, e);
}
}
private Task HandleExceptionAsync(HttpContext httpContext, Exception e)
{
httpContext.Response.ContentType = "application/json";
httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
//httpContext.Response.StatusCode = (int)HttpStatusCode.OK;
string message = e.Message;
return httpContext.Response.WriteAsync(new ErorDetails
{
IsSuccess = false,
Message = message
}.ToString());
}
}
}
//ExceptionMiddlewareExtensions
using Microsoft.AspNetCore.Builder;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BSS_B2B_API.Extensions
{
public static class ExceptionMiddlewareExtensions
{
public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app)
{
app.UseMiddleware<ExceptionMiddleware>();
}
}
}
Startup içerisine aşağıdaki kod yazılır
app.ConfigureCustomExceptionMiddleware();
Yukarıda işlemlerden sonra Controller lar yazılır
örnek olarak 2 tane controller fotoğrafı eklenmiştir.
// TEK BİR DATA DÖNDÜRMAK İÇİN
[HttpGet("ProfilPageNew")]
public async Task<IActionResult> ProfilPageNew()
{
//var firmId = _httpContextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "FirmaID").Value;
var firmId = 27576;
DtResponse<object> result = new();
using var connection = new SqlConnection("Data Source=185.122.203.104,1433;Database=DursunBatiDB; Integrated Security=false; User Id=Maliyet; Password=BssYazilim**2020");
var firmaTemel = await connection.QueryFirstAsync<Company>($@"exec spB2B_ProfilBilgileri @firmaID={firmId}");
var firmaAdress = await connection.QueryAsync<string>($@"exec spB2B_ProfilAdresler @firmaID={firmId}");
result.Data = new { firmaTemel = firmaTemel, firmaAdres = firmaAdress };
return Ok(result);
}
// LİST DÖNDÜRMAK İÇİN
[HttpPost("TeklifTalepListesi")]
public async Task<IActionResult> TeklifTalepListesi(TeklifTalepViewModel model)
{
//var firmId = _httpContextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "FirmaID").Value;
DtResponseList<TeklifTalep> result = new();
var firmId = 27575;
using var connection = new SqlConnection("Data Source=185.122.203.104,1433;Database=DursunBatiDB; Integrated Security=false; User Id=Maliyet; Password=BssYazilim**2020");
var teklifTalepList = await connection.QueryAsync<TeklifTalep>($@"exec spB2B_TeklifTalepler
@firmaID={firmId}
,@TalepTarihiBaslangic='{model.TalepTarihiBaslangic.ToString("yyy-MM-dd")}'
,@TalepTarihiBitis ='{model.TalepTarihiBitis.ToString("yyy-MM-dd")}'
,@TerminTarihiBaslangic ='{model.TerminTarihiBaslangic.ToString("yyy-MM-dd")}'
,@TerminTarihiBitis ='{model.TerminTarihiBitis.ToString("yyy-MM-dd")}'
,@TeklifGrupNo ='{model.TeklifGrupNo}'
,@TalepDurum ={model.TalepDurum}");
result.Data = teklifTalepList.ToList();
return Ok(result);
}
Burada yapılan işlem özet olarak şu şekildedir.
Erorr işlemi ExceptionMiddleware içerisinde yönetilecektir. WepAPI success geldiğinde ise controller içerisinde istenilen model ile döndürülülecektir. Biz burada liste ve obje olarak 2 türde veri döndürdüğümüz için 2 model oluşturduk.
Last updated