اگر فیلدی در دیتابیس هست که نباید به صورت json به سمت کاربر ارسال شود ، یا پراپرتی ای در همه کلاسهای Dto (ViewModel) دارید که میخواهید از Response همه api ها حذف شود از این راهها میتونید استفاده کنید :
[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() != "<") { var json = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(responseBody); if (json != null) json.Property("password")?.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 های پروژه حذف میکنیم.