Home > Enterprise >  Exception shows up in console although try...catch must prevent it
Exception shows up in console although try...catch must prevent it

Time:06-21

In my minimal API I try to save entity to database. The table contains UNIQUE constraint on license_plate column, so DbUpdateException would be thrown if same license plate would be passed in. I used try..catch in order to handle this situation:

app.MapPost("/vehicles", (VehiclesContext db, Vehicle vehicle) =>
{
  var entity = db.Add(vehicle);
  try
  {
    db.SaveChanges();
    return Results.CreatedAtRoute("GetVehicle", new { inventoryNumber = entity.Entity.InventoryNumber }, entity.Entity);
  }
  catch (DbUpdateException)
  {
    var error = new JsonObject
    {
      ["error"] = $"Creating vehicle failed because such license plate already exists: {vehicle.LicensePlate}"
    };
    return Results.BadRequest(error);
  }
}).AddFilter<ValidationFilter<Vehicle>>();

However, when I pass duplicate license plate, I see this exception in console: enter image description here

So, why does this exception show up in console? I tried to play with LogLevel for Microsoft.AspNetCore in appsettings.json (and appsettings.Development.json also) by changing Warning to Information, but still exceptions shows up.

CodePudding user response:

The exception is logged prior to throwing, so you cannot stop the logging mechanism from being invoked.

However, you should be able to control output using LogLevel.

Note that the log comes from "Microsoft.EntityFrameworkCore" not "Microsoft.AspNetCore".

CodePudding user response:

I just don't want to see errors which I handle in try...catch block!

Do you mean you don't want to see the fail ? Use Try-catch in minimal API?

Below is a demo, you can refer to it.

without try-catch

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>{
      string s = null;
      if (s == null)
      {
          throw new ArgumentNullException(paramName: nameof(s), message: "parameter can't be null.");
      }}    
);    
app.Run();

result:

enter image description here

use try-catch:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>{     
      try
      {
          string s = null;
          if (s == null)
          {
              throw new ArgumentNullException(paramName: nameof(s), message: "parameter can't be null.");
          }
      }
      catch (Exception e)
      {
          Console.WriteLine("{0} Exception caught.", e);         
      }
  }
);
app.Run();

result:

enter image description here

  • Related