محمد کمائی - Telegram : @komayi
محمد کمائی - Telegram : @komayi
خواندن ۲ دقیقه·۳ سال پیش

حذف یک فیلد Dto (ViewModel) از خروجی web api های دات نت کور - Remove a property (field) of dto (ViewModel) from asp.net core web api

اگر فیلدی در دیتابیس هست که نباید به صورت json به سمت کاربر ارسال شود ، یا پراپرتی ای در همه کلاسهای Dto (ViewModel) دارید که میخواهید از Response همه api ها حذف شود از این راهها میتونید استفاده کنید :

  1. برای حذف کلی هم از ورودی به asp.net core و هم حذف از خروجی web api های asp.net core میتونید در کلاس Dto روی سر property مورد نظر این attribute رو بزارید :
[System.Text.Json.Serialization.JsonIgnore]

2. برای حذف field مورد نظر فقط از خروجی web api میتوان از MiddleWare استفاده کرد و از Response حذفش کرد. برای این کار در پروژه asp.net core web api خود یک فولدر به نام Configuration یا Config اضافه کنید و این کلاس رو در اون قرار بدین :

using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System.IO; using System.Threading.Tasks; namespace YOURPROJECT.Api.Configurations { public class ResponseMiddleware { private readonly RequestDelegate _next; public ResponseMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext httpContext) { var originBody = httpContext.Response.Body; try { var memStream = new MemoryStream(); httpContext.Response.Body = memStream; await _next(httpContext).ConfigureAwait(false); memStream.Position = 0; var responseBody = new StreamReader(memStream).ReadToEnd(); // Custom logic to modify response if (responseBody.ToCharArray()[0].ToString() != &quot<&quot) { var json = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(responseBody); if (json != null) json.Property(&quotpassword&quot)?.Remove(); responseBody = json.ToString(); } var memoryStreamModified = new MemoryStream(); var sw = new StreamWriter(memoryStreamModified); sw.Write(responseBody); sw.Flush(); memoryStreamModified.Position = 0; await memoryStreamModified.CopyToAsync(originBody).ConfigureAwait(false); } finally { httpContext.Response.Body = originBody; } } } }

سپس این میدل ویر را در فایل startup.cs در متد Configure و قبل از app.UseEndpoints ثبت کنید :

app.UseMiddleware<ResponseMiddleware>();

دقت داشته باشید که با روش میدل ویر روی خروجی تمام api ها تاثیر میگذاریم و فیلد password را به صورت اتوماتیک از تمام web api های پروژه حذف میکنیم.

asp net coremiddleware
C# , .net core & angular & blazor , sql server
شاید از این پست‌ها خوشتان بیاید