Elegant Global Error Handling Using Middleware In ASP.NET Core

Поділитися
Вставка
  • Опубліковано 7 лис 2024

КОМЕНТАРІ • 215

  • @MilanJovanovicTech
    @MilanJovanovicTech  2 роки тому +11

    Get the source code for this video for FREE → the-dotnet-weekly.ck.page/error-handling
    Want to master Clean Architecture? Go here: bit.ly/3PupkOJ
    Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt

  • @Uncle-Dee
    @Uncle-Dee 8 місяців тому +2

    Thank you Milan...
    This was a very clear and beautiful explanation.

  • @pawegruba4719
    @pawegruba4719 2 роки тому +11

    I think it might be worth to mention something about Exception Filters, I know they are a bit different but in general are also used to handle exceptions

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +3

      I haven't used them in practice to be honest, Middleware is what I default to

    • @bloopers2967
      @bloopers2967 Рік тому +2

      ​@@MilanJovanovicTechI use exception filter all the time, you just have more content in the exception filter than exception middleware because they are called later after the pipelines

  • @sagarchowdhury2493
    @sagarchowdhury2493 2 роки тому +4

    Hi Milan, this is a great tutorial for handling error globally. Of course, I would love to know some more complex functionality which we can make place inside some other subsequent middleware to make our code better.

  • @James66662
    @James66662 7 місяців тому +2

    You make concepts very easy

  • @ssushovan
    @ssushovan Рік тому +1

    Excellent video!
    But, could you tell what's the benefit of using 3rd approach here?

  • @zikkrype
    @zikkrype 2 роки тому +2

    Like. Unless you need to have additional data from failed request middleware is a good option. In other cases consider exception filters.btw: may be a nice topic middleware vs filter

  • @nikuniku1235
    @nikuniku1235 7 місяців тому +2

    how simple and efficient, really good job.

  • @88spaces
    @88spaces 8 місяців тому

    Thank you, Milan. I'm using your example in a new project. It's already helpful.

  • @krishanthadharmasiri5266
    @krishanthadharmasiri5266 Рік тому +2

    Great video, thanks , is there any particular reason to add the middleware as Transient why not scoped?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому +2

      Scoped only makes sense if you need a scoped service inside

    • @xDeltaDoggox
      @xDeltaDoggox 2 місяці тому

      ​@@MilanJovanovicTech Could you please elaborate on "if you need a scoped service inside"?🤔😅

  • @AmjadKhateeb
    @AmjadKhateeb 2 роки тому +2

    Thanks for the great video.
    I think using the status code again in the body of the response is unnecessary duplicate.
    I also prefer to add a RefID in the response body which is linked to the error log. So, in case that the client contacted the support team, they can easily find the original error log.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      It's not a unnecessary/duplicate. Why would the consumer of your API have to see the HTTP response code?
      We're giving them the ability to take a look at the response body, and have all of the relevant information.

    • @AmjadKhateeb
      @AmjadKhateeb 2 роки тому +1

      ​@@MilanJovanovicTech There is an http status in the response header

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +1

      @@AmjadKhateeb www.rfc-editor.org/rfc/rfc7807

    • @AmjadKhateeb
      @AmjadKhateeb 2 роки тому +1

      ​@@MilanJovanovicTech Thanks. The explanation is very clear in the document. I didn't know that there is such a standard.

  • @FalcoSparverius
    @FalcoSparverius 11 місяців тому

    Hi! thanks for your videos, are amazing. I have a question, (im sorry if its a bad one, I am a begginer ) I could add some others Catchs with particular exceptions and handle them each one in a particular way, with differentes codes an differentes ProblemDetails, or thats not the use for this kind of middleware? thanks!

    • @MilanJovanovicTech
      @MilanJovanovicTech  11 місяців тому

      No bad question on this channel :)
      Yes, you can definitely do that. A global exception handler based on exception type. 👌

  • @vicky2118
    @vicky2118 Рік тому +1

    Great video
    One Question
    Why you registered GlobalExceptionHandlingMiddleware as Transient not Scoped?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому +1

      Since I don't inject any Scoped services, it can be Transient

  • @Marcos-XurryPET
    @Marcos-XurryPET 9 місяців тому

    Nice work, Milan Jovanovic!!!
    How to use middelware to make filters, orderby and pagination???, Thank u.
    Regards.

  • @yaKaiZen
    @yaKaiZen 2 роки тому

    The 3rd option was new learning for me and enjoyed the custom JSON response throwing most! Thanks, ​ @Milan Jovanović for your community effort!

  • @filthkyory
    @filthkyory 7 місяців тому +1

    Milan... How to configure an inline watch in your visual studio, could you tell us?

  • @lazziemunetsi1498
    @lazziemunetsi1498 11 місяців тому +1

    Great stuff, thanks very much Milan.👏

  • @abdelrahmananwar885
    @abdelrahmananwar885 Рік тому

    i liked your way of explanation, thank you.

  • @nullentrophy
    @nullentrophy 6 місяців тому

    What do you think about Exception filter instead of middleware for error handling?

  • @coder3123
    @coder3123 9 місяців тому

    Hey, can you shed some light on use of AddTransient vs AddScoped in this case?

    • @MilanJovanovicTech
      @MilanJovanovicTech  9 місяців тому

      learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection#service-lifetimes

  • @upendrakumarpandey2838
    @upendrakumarpandey2838 7 місяців тому

    This is very good example of

  • @samehkeshta89
    @samehkeshta89 Рік тому +1

    Great tutorial, thanks Milan.

  • @oneillci
    @oneillci 2 роки тому +2

    Instead of manually serializing and setting the content type, I like to just use _await context.Response.WriteAsJsonAsync(problem);_ Really enjoying your videos BTW

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      You're writing to a Response which is in memory. Nothing too asynchronous there.

    • @velebyte
      @velebyte 2 роки тому

      @@MilanJovanovicTech What he is saying, why do serialization and setting the content type with those two lines of code, when the WriteAsJsonAsync method does both of those things? Great videos btw, and I love the WoW collection in the back

  • @Retro80smusic
    @Retro80smusic Рік тому +2

    Great video Milan! Thank you for presenting these important topics.
    One observation: Instead of using two statements to write the json body in the response you could merge them in one statement.
    await context.Response.WriteAsJsonAsync(errorResponse);
    Also, why do you need to make the middleware a transient service? Can you please explain, I was sure this worked without needing to do this

  • @davidemmanuel3001
    @davidemmanuel3001 Рік тому +1

    This is cool. Please can you drop the github public repo for your videos? It will really be helpful

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      I share the code with my Patreon supporters, but I'm sure you can dig up something similar on my github:
      github.com/m-jovanovic

  • @mohamedroshdy4916
    @mohamedroshdy4916 2 роки тому +1

    very clear and good, but by this way all errors will have the same response can you indicate this point to me , what I should do to
    describe each type of error
    ..thanks

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +1

      You have two options:
      - Use the middleware only for 500 internal server + return meaningful errors in controller
      - Throw custom exceptions (NotFound, BadRequest) from your code, and handle them in middleware and return appropriate response code

    • @mohamedroshdy4916
      @mohamedroshdy4916 2 роки тому

      @@MilanJovanovicTech, oh right, thanks

    • @mohamedroshdy4916
      @mohamedroshdy4916 2 роки тому

      @@MilanJovanovicTech ,please can you have an example or demo to view this point,I understand it but need to show in practice

  • @francoislepron2301
    @francoislepron2301 2 роки тому +1

    Yes, I have learned something new, but I can not tell that I master it. Your audience is not only composed by experts, but also by intermediate developers. I would be really interested in more details explanations or links on the documentations where we can find what you don't explain, because you assume that developers already know these fundamental concepts. It is an hard work, but this is how Brackeys has reached more than one million of followers for Unity3D tutorials.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +6

      Hey Francois, I really appreciate the feedback.
      To be honest, intermediate-to-senior level engineers are my intended target audience at the moment. Until I can master the skill of being able to explain concepts in even simpler terms.
      For documentation links, that's a great suggestion. I'll try to improve on that front.

    • @francoislepron2301
      @francoislepron2301 2 роки тому

      @@MilanJovanovicTech Many thanks.

  • @musacj
    @musacj 2 роки тому +2

    Great tutorial Milan.
    I wonder if it would make sense to have an error tracking id, like a GUID or any unique id. That is, to pass it to LogError and also on the to the Title or Detail property of ProblemDetails object.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +3

      We can add a middleware that sets a Request Id header for each request

    • @musacj
      @musacj 2 роки тому

      @@MilanJovanovicTech thanks for the reply. I'll try that out

  • @stevehiggin
    @stevehiggin 2 роки тому +2

    My comment seemed to be deleted before, but the StatusCodes class in the Microsoft.AspNetCore.Http namespace already has fields that are ints (no casting) for all the Http response codes you might want to return, and it also has the code with the description, which is good when dealing with the less common response codes.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +1

      Absolutely Steve, that's what I usually use with Swagger's [ProducesResponseType]

  • @mesutdemirci7933
    @mesutdemirci7933 Рік тому +1

    Great tutorial Milan.thanks

  • @MilosBencek
    @MilosBencek Рік тому +1

    excellent video Milan (y) Thanks

  • @richardhaughton9633
    @richardhaughton9633 2 роки тому +3

    Hi Milan, Great Tutorial. Could you make a tutorial on how to handle Errors on the client side. For example for a http client who can have a T Resposne or a problemDetails. I struggle to find an elegant way to handle both type of response. And maybe also how to handle it in an MVC or even better a blazor app. Thanks!

    • @richardhaughton9633
      @richardhaughton9633 2 роки тому +2

      Also, why not return an application/json+problem as response content type?

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +2

      - why not return an application/json+problem as response content type?
      I missed that, to be honest
      - And maybe also how to handle it in an MVC or even better a blazor app
      You need some way to create a hook when an error happens, and you need to make your error responses generic for the entire API to be able to do that. If you always return a ProblemDetails, on the API consumer side that becomes doable.

  • @sunzhang-d9v
    @sunzhang-d9v Рік тому +1

    ExceptionHandlingMiddleware switch need to add OrderNotFoundException, Write it every time?

  • @AnkurPriyaDarshi-j3c
    @AnkurPriyaDarshi-j3c 6 місяців тому

    In the middleware everything performs according to their presence in the sequence. Because we know that every component will execute after their prior component. In this video, you are putting exception handling(obviously as a middleware component) after executing other components of middleware. Have you think, it should be introduced at initial levels in the Program.cs

    • @MilanJovanovicTech
      @MilanJovanovicTech  6 місяців тому

      You're welcome to apply the ordering you want. Most middleware doesn't throw exceptions until we get to our actual request handler

  • @AtenaMohammadvandAzad
    @AtenaMohammadvandAzad 3 місяці тому

    Great Tutorial ! Thanks😍

  • @Valoo24
    @Valoo24 Рік тому +1

    Great Tutorial ! Thanks :)

  • @Nicetrycutiepie
    @Nicetrycutiepie Рік тому +1

    Thank you, Very useful, i learned lot from this.

  • @kodindoyannick5328
    @kodindoyannick5328 8 місяців тому +1

    Great Great content! Thank you so much Milan.

  • @voltairend
    @voltairend Рік тому +1

    Thank you

  • @AmirHashemZadeh
    @AmirHashemZadeh Рік тому +1

    it was simple and awesome.

  • @sajithsageer182
    @sajithsageer182 Рік тому +1

    Nice one as usual😀

  • @MolotovClipes
    @MolotovClipes Рік тому +1

    When i do return BadRequest this code dont catch... Is correctly ?

  • @Zisane21
    @Zisane21 7 місяців тому

    Hi Milan, if you place the middleware AFTER UseAuthorization\UseAuthentication then it won't cacth exceptions thrown by an AuthHanlder class for example. Shouldn't it go before UseAuthorization\UseAuthentication ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  7 місяців тому

      Yes

    • @Zisane21
      @Zisane21 7 місяців тому

      @@MilanJovanovicTech Why with the 3rd option did you register the ExceptionMiddleware with Transient scope? ChatGPT says it should be singleton 🙂

  • @СашаТкаченко-и4б

    Thanks a lot 🎉

  • @DarshanaHashendra
    @DarshanaHashendra Рік тому +1

    Great stuff. keep up the good work.

  • @nayanchoudhary4353
    @nayanchoudhary4353 2 роки тому +1

    @milan I wish you had explained the sequence of middlewares invocation; how order matters

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +1

      Doesn't the visual explanation at the start illustrate the concept? 🤔

    • @nayanchoudhary4353
      @nayanchoudhary4353 2 роки тому

      @@MilanJovanovicTech Kind of. But what happens when I mix IMiddleware and non IMiddleware implementation?

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому +1

      @@nayanchoudhary4353 Both approaches work, the order they are registered in is the order in which they execute

  • @sabajangidze
    @sabajangidze Рік тому

    Hello,1:18 three middleware is just an example or it is 3 middleware between request and respone?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому +1

      It's one middleware - implement in three different ways

    • @sabajangidze
      @sabajangidze Рік тому

      @@MilanJovanovicTech thank for you answer

  • @hamlet.h.hakobyan
    @hamlet.h.hakobyan Рік тому +1

    I think, if we will put this middleware at the start of the pipeline we can log unhandled exceptions from other middleware

  • @GarethDoherty1985
    @GarethDoherty1985 Рік тому +1

    Weird that your video appeared when it did. I had already applied option 2 to my API. But randomly, when I explicitly throw, or an unhandled error occurs, the middleware isn't catching it =/ I can see I enter the middleware fine, but it never enters the catch. Can you think of any reason why?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      Which exception are you catching?

    • @GarethDoherty1985
      @GarethDoherty1985 Рік тому

      @@MilanJovanovicTech Just the base "Exception" exact same code as you and everyone else on the internet has done when writing about this :D

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      @@GarethDoherty1985 Could be something around invoking the RequestDelegate

    • @GarethDoherty1985
      @GarethDoherty1985 Рік тому

      @@MilanJovanovicTech
      private readonly RequestDelegate _next;
      public ExceptionHandlingMiddleware(RequestDelegate next)
      {
      _next = next;
      }
      public async Task InvokeAsync(HttpContext context)
      {
      try
      {
      await _next.Invoke(context);
      }
      catch (Exception ex)
      {
      await HandleExceptionAsync(ex, context);
      }
      }
      Anything weird here you see? I see it goes into the try, go elsewhere in code get or throw error, but never goes inside the catch!

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому +1

      @@GarethDoherty1985 That is entirely wild 😱
      I have no idea why it's behaving like that

  • @tayyabshaikh3286
    @tayyabshaikh3286 8 місяців тому

    Awesome video, great explanation!!

  • @monsieurnet
    @monsieurnet Рік тому +1

    I followed the 2nd way in your tutorial step by step but got this error : "Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'WebApi.Middleware.GlobalExceptionHandlingMiddleware'". So i tried to add this : "builder.Services.AddTransient(typeof(ILogger), typeof(Logger)); " in the Program.cs but still not working. Do you have a solution ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому +1

      services.AddLogger? 🤔

    • @monsieurnet
      @monsieurnet Рік тому

      @@MilanJovanovicTech oh gosh i didn't know there was such a service. Thank you bro ;-D

  • @manojkumar-gt6ng
    @manojkumar-gt6ng 10 місяців тому

    Can you provide a video on c# creating custom attributes for class, method and variable

  • @adilbangush5014
    @adilbangush5014 Рік тому +1

    Can you make one video about Extending ProblemDetails, using with the above global error handling in which a developer can include the custom payload of an error information.

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      ProblemDetails already has an Errors property which is a dictionary, and you can extend it freely

  • @kiquenet
    @kiquenet 2 роки тому +1

    Applies to Blazor ?

  • @shakib4845
    @shakib4845 Рік тому

    nice video but just for very beginners! you could dig more into various ways of global error handling and come up with a nice fancy way dude :)

  • @surenrdashrestha2831
    @surenrdashrestha2831 Рік тому

    Hey thanks for sharing this. I have one question. I am using global exception handler in my project but some scenario i need to keep going even if i have exception. For example i have Mongo Database and SQL Database, If mongo fails for some reason (wrong conn string) and It comes to exception however i dont want to send back 500 status code in response because i have SQL database to query and send back data to the client. Please advise.

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      Well you need to handle this with some sort of decorator on your data access code

  • @birukayalew3862
    @birukayalew3862 2 роки тому +1

    Hi Milan as Always this is helpful ... How can we ensure the exact status code and description for problem detail ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      What do you mean by "exact"? Do you want the status code to be dynamic based on the exception?

    • @birukayalew3862
      @birukayalew3862 2 роки тому +1

      Yes i mean the status code

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      @@birukayalew3862 We have to catch the specific exception in the middleware, and set the appropriate status code

  • @Busk1
    @Busk1 2 роки тому +1

    What about "UseExceptionHandler" ?
    It's cleaner for me to use "UseExceptionHandler", so you don't have to add the middleware to the serviceCollection and you dont have to put that try..catch block
    but good approaches 😁😁

  • @ramonventoso
    @ramonventoso Рік тому +1

    What about aspnetcore web apps. There's a if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    else
    {
    app.UseExceptionHandler("/Home/Error");
    app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
    } code to add. Do you have a video touching on this ? Thanks

  • @talwinter
    @talwinter Рік тому +1

    I am trying to catch the Model Validation error where I get an 400 bad request when one of the fields have incorrect data like required validation or regex validation but I can't catch it a log it. I can use a middleware and get the request but the response returns as 200 status code and not 400 bad request so I can't differ between requests ... any ideas?

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      Place your custom middleware at the top of the middleware chain, so any exception thrown is propagated to it.
      Secondly, are you sure Model Validation throws an exception at all?

    • @talwinter
      @talwinter Рік тому

      @@MilanJovanovicTech well, in the middleware I just use next.invoke and then if I check the Context.Reaponse.Body, I get the 400 status code on the validation error which sets as bad request. The problem is that I need to open a new MemoryStream for every request and then check for the status code and that's a bad practice that can cause a huge memory leak. I didn't find anything more elegant.

  • @BiaoTV
    @BiaoTV 2 роки тому +1

    Hi
    As a note, on the blog its missing the third option code.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      Isn't it this:
      www.milanjovanovic.tech/blog/3-ways-to-create-middleware-in-asp-net-core#adding-factory-based-middleware

  • @maxiklife
    @maxiklife 2 роки тому +1

    Awesome content

  • @moon5964
    @moon5964 5 місяців тому

    Interesting, y set ContentType after sending response? that might works for you:(

  • @ramytawfik9168
    @ramytawfik9168 11 місяців тому

    why did you register it as a transient service not scoped ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  11 місяців тому

      Because it's stateless

    • @ramytawfik9168
      @ramytawfik9168 11 місяців тому

      @@MilanJovanovicTech could you please explain what do you mean by stateless ?

  • @ivanaradenkovic4638
    @ivanaradenkovic4638 9 днів тому

    Thanks :)

  • @namratamatkar7638
    @namratamatkar7638 Рік тому +1

    System.InvalidOperationException: 'An error occurred when configuring the exception handler middleware.
    Either the 'ExceptionHandlingPath' or the
    'ExceptionHandler' property must be set in 'UseExceptionHandler()'. Alternatively, set one of the aforementioned properties in 'Startup.ConfigureServices' as follows..I am facing this issue

  • @washingtonacero8375
    @washingtonacero8375 Рік тому +1

    awesome

  • @catalyysst
    @catalyysst Рік тому +1

    Mine seems to not have triggered the exception even when it threw an exception

  • @CarrigansGuitarClub
    @CarrigansGuitarClub 3 місяці тому

    Excellent

  • @osherhajaj8565
    @osherhajaj8565 2 роки тому +1

    On minute 0:19 you say the concept of middleware in asp.net core but concepts (e.g middleware) are framework agnostic.

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      "the concept of middleware in asp.net core" is obviously not framework agnostic
      That's why I said it like that and not just "the concept of middleware"

    • @osherhajaj8565
      @osherhajaj8565 2 роки тому

      There is no such thing as concept x in framework y. Middleware in .net are not different at the concept level from nestjs middleware and so on. If you want to talk about a concept it is important to note that the framework is insignificant.

  • @mumk
    @mumk 6 місяців тому

    thx!

  • @sekarcse
    @sekarcse 13 днів тому

    How can you return errors using Error Codes along with messages that are translated based on the language?

    • @MilanJovanovicTech
      @MilanJovanovicTech  12 днів тому

      IStringLocalizer: learn.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-8.0

  • @sudhirkumar-wx8hn
    @sudhirkumar-wx8hn 2 роки тому +1

    Awesome

  • @jayakumar2927
    @jayakumar2927 Рік тому +1

    can you share source code

  • @regestea
    @regestea 2 роки тому +2

    don't forget to use sentry in your project

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      I've never used it to be honest. Should I take a look?

    • @regestea
      @regestea 2 роки тому

      @@MilanJovanovicTech absolutely, use it in all of your projects, every time that your product users get an error sentry tells you when and where, and which line of your code has an error and you can see every error that user sees with full detail

    • @ryan-heath
      @ryan-heath 2 роки тому

      @@regestea like … an … exception? 😊

    • @regestea
      @regestea 2 роки тому

      @@ryan-heath maybe 😁

  • @maxpuissant2
    @maxpuissant2 2 роки тому +1

    What if exceptions are thrown for 404 or other status code?

  • @gabriel.andreato
    @gabriel.andreato 7 місяців тому

    Amazing

  • @coding-gemini
    @coding-gemini 2 роки тому

    Very Interesting, thanks for the video Milan, looking forward for more content from you. Can you post a video of how to use the Ilogger to log the error to database or a file ?

  • @oguzhan2393
    @oguzhan2393 11 місяців тому

    for every error you are returning 500 code. I think it is not good for use case.

    • @MilanJovanovicTech
      @MilanJovanovicTech  11 місяців тому

      This is a fail-safe for unhandled exceptions. What else would you return?

    • @oguzhan2393
      @oguzhan2393 11 місяців тому

      @@MilanJovanovicTech can be 404 sometimes can be 400 error. dependens on the case.

  • @diegobonura3485
    @diegobonura3485 2 роки тому

    Thanks for your videos Milan. Main question is about JsonSerializerOptions, how to easily get same json options configured by AddControllers() .AddJsonOptions() call? is it possible to share same settings also on middleware?

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      I think a better option would be create a static field with JsonSerializerOptions and use the inside of the middleware

    • @diegobonura3485
      @diegobonura3485 2 роки тому

      @@MilanJovanovicTech I will try to inject IOptions and let you know!

  • @gauravsingh-qt2zo
    @gauravsingh-qt2zo 2 роки тому +1

    Can anyone tell when to use "is null" vs == while comparison

    • @neociber24
      @neociber24 2 роки тому +1

      Always use "is null" because the operator == can be override.
      But to be real, rarely someone override the equality operator, maybe library authors

    • @MilanJovanovicTech
      @MilanJovanovicTech  2 роки тому

      "is null" reads better. What Fredd mentioned is correct. But in 99% of use cases, this won't happen.

    • @gauravsingh-qt2zo
      @gauravsingh-qt2zo 2 роки тому

      @@neociber24 One more question-> When to use object keyword vs dynamic keyword?. Both can be used to store some complex data at run time. Any advantage of using one over other

    • @gauravsingh-qt2zo
      @gauravsingh-qt2zo 2 роки тому

      @@MarcusKaseder thanks a lot for your answer. Can u answer one more question-> the one reason of using var keyword is that it is short to write as compared to big data type. What is the other major reason to use var keyword????

    • @gauravsingh-qt2zo
      @gauravsingh-qt2zo 2 роки тому

      @@MarcusKaseder thankyou so much sir. One last question how many years of .net development experience u have???

  • @AndreasToth
    @AndreasToth 8 місяців тому

    That's how to do a tutorial!

  • @onlyforkbj
    @onlyforkbj Рік тому

    Hey Mian, I love your video and they are so educational to me and I'm sure to others as well. I would like to ask your opinion on another video from Nick Chapsas which is quite intriguing.
    ua-cam.com/video/a1ye9eGTB98/v-deo.html
    What do you reckon on this? There seems to be a clear trade off when throwing exception and catching them as part of the global exception middleware.

    • @MilanJovanovicTech
      @MilanJovanovicTech  Рік тому

      With proper Client side validation - bad requests are highly unlikely to reach your API. So the only reason a bad request would happen is someone calling your API directly - so I'm fine with the tradeoff i'm making here, and throwing exceptions

  • @punitchachan2517
    @punitchachan2517 10 місяців тому

    your videos are good, but person who has only good knowledge of Dot net tech can understand your stuff. You explain it very fast it is tough to understand.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 місяців тому +1

      Well, I only care about speaking to a .NET audience 🤷‍♂️

    • @eobardthawne6903
      @eobardthawne6903 8 місяців тому

      This is Wendy's sir 😂

  • @olekristiansjbakken4204
    @olekristiansjbakken4204 2 роки тому +1

    I like your videos, but please stop with the zoom inn and out. Looks better without it.

  • @dylanv.dmerwe5960
    @dylanv.dmerwe5960 Рік тому +1

    context.Response.WriteAsJsonAsync