Intro to AppSettings in .NET Core - Appsettings.json, secrets.json, and more
Vložit
- čas přidán 4. 06. 2024
- AppSettings are a big deal in .NET Core. If you are just using appsettings.json, you are really missing out. There is so much more just with the defaults. In fact, by default, we get five different places to put our settings in each .NET Core application. In this video, we will talk about how to use three of those default locations. We will also talk about how you can learn more about AppSettings in my full course titled .NET Core AppSettings In Depth.
Buy the course: www.iamtimcorey.com/p/net-cor...
Source Code: leadmagnets.app/?Resource=Int...
Mailing List: signup.iamtimcorey.com/
Thanks to Ralfs HBK for the topic time stamps:
0:00 - Intro
3:17 - Where .Net AppSettings are used? Creating a Blazor Server App
6:33 - AppSettings intro
8:45 - Why to use settings
11:50 - Razor pages how to
13:59 - Bringing the configuration in to the application: The setup
18:28 - Side note about double initialization [ OnInitialized() ]
20:45 - Bringing the configuration in to the application: The values
22:55 - Recap: loading from appsettings.json
24:05 - Connection strings
27:30 - AppSettings and source control
29:01 - Sensitive data
32:12 - Development vs Production settings
40:12 - User Secrets settings
45:57 - Summary and concluding remarks
if anybody on the entire internet deserves my money for a course, that person is you, you're the man
Thank you!
Happy birthday for yesterday Tim. hope you had a good one. Love from South Africa...
Thank you!
So much quality content for free!! Just crazy. You make my life as an aspiring developer way easier. I have already rebuilt many of your programms. Thank you! I m sure, you spent lots of effort and time creating this content.
Great to hear! It is my pleasure
Happy Birthday and Congrats on your subscriber count Tim. I've learnt more from you in 3 years than from 15 years in the industry!!
Wow, thanks!
Happy birthday Tim, your videos always make me more confident on C#, thanks a lot
My pleasure! Thank you!
Happy birthday!
Such a great video, full course is for tomorrow!
Have fun!
Thank you Tim for your special offer. Just bought it on your web page and I' am totally impressed. This will make a lot of challenges much easier to solve :)
Awesome! I am glad it is so helpful.
Learned a lot from you Tim. THANK YOU! And Happy Birthday!
Awesome! Thank you!
Happy birthday Tim, you inspire me to work hard and progress in programming. Thanks for your efforts.
Great to hear!
Happy belated birthday! I appreciate you for sharing your knowledge with everyone.
You are so welcome
Wonderful. I only have a few months of experience with .NET Core and had always some confusion with this topic. Your video clarified my ideas a lot, I really liked the simplicity, structure and straight to the point of your explanations.
I am glad it was helpful.
It's amazing the way he talks. Sometimes I think that is an old friend. :-)
Thank you. I appreciate that.
Happy Birthday to You!!!Wish you many enthusiasm to share valuable knowledge and get the same much thanks for your great job!
Thank you very much!
Happy birthday, Tim. I really enjoy your videos.
Thank you very much!
Thank you for such a clear and well explained overview of IConfiguration and the apsettings hierarchy! Appreciate it! Cheers.
Thanks for watching!
Happy birthday Tim! Thank you for all your efforts!
Thank you too!
happy birthday Tim!!!! thanks for another amazing video!
Thanks again!
Your channel is my best discovery of the year
Awesome!
OK, so I've just finished with your the getting started with c# list and wanted to say thanks, you really know how to teach
Awesome, thank you!
The user secrets was an oh my God there is something like that moment!!! Thank you. And your qualify is amazing thanks again.
You're so welcome!
Loved the video shared it with some juniors devs. You really set up a foundations for them. Keep up the good work
Thanks, will do!
I took the full course. What I found most valuable was the section on security, particularly, production secrets. The free video focuses heavily on the development environment, but being responsible for deployment as well, I wanted to know more about the production environment.
Thanks for a clear and practical guide!
We are glad it helped.
Wish you a very happy birthday Tim. May god bless you and your family 🙏
Thank you for your time and efforts 😊
Many thanks!
Happy Birthday, man! Hope you will be doing well :)
Big thank you for your videos ^^
Thank you very much!
Thanks a lot Tim, and happy belated birthday from me in South Africa
Thank you!
Happy birthday tim..
Thank you for the video..
Thank you! ... and you are welcome.
Hi Tim. Another great Video! Thank you.
By the way, 20 September was my birthday too! And of course... Happy Birthday!
Happy birthday!
Я хотел Вам сказать, что у Вас отличный, понятный и логичный английский. ;) курс по сишарп. ВЫ ЛУЧШИЙ. Вам спасибо.
Спасибо, я ценю это. Я добавил ваше предложение в свой список.
Great content! Thanks, Tim!
You are welcome.
Happy birthday Tim!
Thank you!
When it comes to teaching C# I cant just think in anyone else. IamTimCorey is a channel that has built us up from lots of view points. Transparency, simplicity, experience and excellence. Even my mama says: "..Oh you're looking at this kind guy again"😅
I strongly wish this channel to keep growing, and all the efforts that you're putting in to be paid off with anything that can be valuable to you and yours.
Your community thanks you Tim, and so do I. Greetings from Barcelona
I appreciate the kind words.
Happy Belated Birthday! Hope you had a great one! Hope to see the Multi-Project soon :)
Thank you!
Happy birthday to the best C# teacher on CZcams. Always a pleasure watching your tutorials.
Now I'm thinking maybe forcing my data access layer(normal class library project) to hold my connection strings is a bad idea.
P.S. I only did it thinking if I have to change my frontend later on it would benefit me. Lol
I am glad you see the value
As always, great content Tim.
Just a small correction. I think while reading configuration from various sources, there is no "termination logic" applied. I mean it's not like "I found this setting here, not gonna check the next sources". On contrary is the opposite, it goes through all sources and keeps overwriting values as it finds them. For example, appsettings.Development.json is the last in the chain, that's why those values override the other ones. Simply because the values get overwritten. The secrets are the last ones actually.
Happy Birthday, Tim.
Thank you!
Thank you for this free Introduction to AppSettings. It clears up some of my questions regarding the overall structure of Projects in .Net and how the different components fit together, although I would really love to see a video on that as well. I did look through your youtube videos allas I didn't find one that seems to cover that. If it is already in existence that is great, could you please point it out to me, if not I personally think that would make a very interesting subject to see a video about, uncovering a bit more of the "magic" that seems to be going on in Visual Studio at some times.
After this video I decided I wanted to know even more about this subject so I bought your course, thank you for creating all this wonderful content.
Thank you for buying in and for the course suggestion, added to the list!
Jesus @Tim, I’ve been a .net developer for 2 years. I thought I knew all there was about the app.config / web.config files. Next level stuff there Tim. Love this channel, probably the most valuable like and subscribe channel.
I have for sure developed a different solution to things because of having to deal with the app.config file. We store our connection strings, and having a service account password in plain text is obviously not good. Needed this video 8 months ago.
I am glad it was helpful, even if you needed it earlier.
Happy Belated Birthday Tim !!!
Thank you!
watching 14 hours after upload, and I hope I'm not too late to say "Happy belated birthday Tim!"
Thank you!
I Swear learning C# for a person coming from languages like python or JS is really frustrating and difficult. The documentation of Microsoft is really bad in terms on navigation and linking topics in a good hierarchy. You are the best in explaining the topics that can be understood by anyone!!! So much grateful for your efforts, thanks from the bottom of my heart.
I'm glad my content has been helpful. Have you seen the Microsoft documentation recently, though? Check out docs.com
Thank you very much for your content.
You are welcome.
Wishing you a many more happy, blessed and fulfilling years ahead. HAPPYH BIRTH DAY TO YOU, MY MENTOR!
Thank you.
Happy delayed birthday great info. I hadn't thought that the appsettings could be that much useful.
They are pretty awesome.
Happy Birthday Tim
Thank you!
Thanks Good Man, this was very usefull.
You are welcome.
Excellent stuff!
Thanks!
@IAmTimCorey do you have a promo to the depth course?
Not currently, no. If you are on the mailing list, you will hear about any discounts.
Thanks for this.
You are welcome.
Just beginning, and only getting traction with programming through this tutorials. I've been learning in .Net Framework and got comfy with the xml config file... then tried a .Net Core app and just failed. Searching around to learn how appsettings.json worked and finding little that helped. Just last night, I wondered if you'd do a video so I could get a fundamental understanding. Wake up, and hey presto! Between you and Ben Eater, I'll understand! Great teaching for a slow learner!
Hang in there, you can do this!
Really Great!
Thanks!
Hi Tim ..again grt content and way you present them as usual, Indeed it is a useful tool to use these keys keeping in mind the purpose we need to use yo when it comes to working real quick in agile with devops now-a-days in company Project,
Glad you like them!
Happy birthday Tim
Thank you!
love you, very nice videos.
Thanks!
Gr8 Content Loved it!!!!!!
Glad you liked it!
Big congrats on hitting 10k customers.
Thank you!
Amazing video. Loved it! (y)
Thanks!
Thank you! :)
You are welcome.
Belated happy birthday Tim. =)
Thank you!
Thanks!
Thank you!
Hi Tim, Great videos. I am looking forward to any videos on the integration of any third party payment services like Stripe or TransferWise into .NET CORE 3.1 specifically. Thanks!
I will add it to the list. Thanks for the suggestion.
Happy birthday Tim! Thanks for sharing this. It gives a good veiw. What I really miss are user settings. I will see if this topic is covered in the course. For user settings, the user must be able to change the value of a setting from the UI. After looking for a number of solutions, I now use the appsettings.json for defaults and the good old registry for other settings. (WPF desktop applications only).
As far as I can see in the course contents, I see there is a lesson on an Options class. Does this cover user settings and how to set things up that a user can change settings?
I'm hoping you saw the video by now and it added value. I do not cover cover user settings specifically
Danke!
Thank you as well!
This is the first time I have seen you. 😀
You should check out the Dev Questions series, where I answer questions developers and prospective developers have: czcams.com/play/PLLWMQd6PeGY2G8Q0d_yOPc_CocyqrFRoZ.html I'm on screen for those videos every Thursday.
Happy Belated Birthday Tim !!!
Very useful video as always.
I've successfully configured appsetting.json in WPF app after many research online.
But I'm struggling to put it to work in MvvmCross app.
Because the M and the VM are in a class library while the V is in WPF project. Very confusing. Looks like the bald area in my head will get larger after this. LOL
I humbly ask if you could add it to the list of your future videos, along with DI, View Navigation and View inside a view (to create a Menu bar like TimCo Retail Manager app) for MvvmCross app.
Thank you and wish you have a nice day Tim!
Noted and added to the list. Thanks
Thank you Tim for amazing videos you bring.
Regarding appsettings.json file, if it is modified and saved, does this causes the application to restart?
Happy birthday to you, I hope you make video about design pattern CQRS using Dapper
I will add it to the list. Thanks for the suggestion.
Hi Tim, great video! Can we update "appSettings"?
Happy birthday Tim, can please make a tutorial about clean architecture on asp.net core
I will add it to the list. Thanks for the suggestion.
Happy belated Birthday Tim. I have an array of objects for one of my subsetting values. When running in development mode, everything works fine if the array in appsettings.Development.json has more elements than in appsettings.json. However, if the other way around, the array has a mixture of elements. In other words, array element at index 0 in appsettings.Development.json overwrites index 0 in appsettings.json rather than replacing the entire array. Is there a way around this? Do you cover it in your paid course? Thanks.
Happy happy birthday Tim... I wish the best for you and your family!!! Thank you very much for your efforts and all this wonderful job fokng those videos... I really love your courses and the easy and clear way that you teach... 🥰
Pdt... I have a question...since Im doing the fundamentals course...and I want to get the course that you are offering here... how long time I will have access to this new course if I bought it? I want the gift...but I will not finish fundamentals in the next days....
Thank you very much!
By the way, when you purchase a course, you get lifetime access to it.
What if you have to obtain specific values from the Windows Registry and need those values to determine whether a database column is set or not. Instead of pulling from the Registry to display a value in a razor page in a BlazorWASM project, is there a way to store keys and values from the Registry safely in an appsettings.json file?@IAmTimCorey
I got confused about the learning order a bit Tim. You mentioned learning 4 things in order in your latest video as following;
C#, Blazor, Docker, and Azure, but here we are seeing Blazor in this video when we are trying to learn C# as a first step.
As I'm trying to learn C# and everything is so messy for me, this ordering misconception makes me confused now, could you enlighten me, please?
belated happy birthday, my friend
Thanks so much
hey, Mr Tim is filtering data with Linq a good idea? or we should write filtering statement inside the SQL command? I think writing one select statement and then use Linq for filtering make things easier, does this has any noticeable performance difference?
Let SQL do what it does best and then let C# do what it does best. That means sort and filter in SQL whenever possible and use LINQ only after you have done as much as you can in SQL.
How can we handle launchsettings.json settings in Blazor Webassembly apps similarly to what you've shown here?
Amazing as always!
Thanks!
I'm trying to figure out how to make an appsettings.Staging.json and have it run on our staging server but I don't know how to set the environment variable to Staging when we run on the staging server.
Hello, nice video, I enter here because I have an issue, I have a different connectionString to use in my local project than the one that is used in the Production Project... how can I do to configure for instances a connection string in development mode than production mode, because when I push my changes to the repo the connection String of my AppSettings.Json is been changed with my local Connection Strings but that's not what I want
"For those of you that are building apps in production", I'm proud to say I take that as literally as possible
Hello Tim ,
Thank you for your amazing content.
would u please make a syncfusion tutorial, like how to use Syncfusion controls in your WPF application or a short tutorial about Metro Studio :)
thx again
I will add it to the list. Thanks for the suggestion.
@@IAmTimCorey Thank you :)
Do you have a tutorial on how to handle Blazor Server App connection timeouts? Running on local works great, but when deployed to production, the connected state times out quickly.
Thx for this video.
It sounds like a server configuration issue. It should not time out quickly. That does not sound like something you would configure in C# (you can change timeouts on the C# side, though).
You share a birthday with my youngest daughter! Happy Birthday!
So cool! Thank you!
Thank you for the great explanation. However I have one question. Why would anyone store the value “number of days” in app settings rather than store in a class for constants. Does it bring any benefits?
You can change the appsettings.json file manually in production at any point. You would have to recompile and re-publish your application in order to change a constants class value.
Hey Tim, does this also apply for not Core web api ASP.NET MVC? Or is the old json file for confing stored into an object on loading the app still the best way to store configuration for a not Core app ?
This system only works for .NET Core. In .NET Framework apps, we have app.config/web.config. You can still create some transformation files but it is definitely not as polishes as this system.
@@IAmTimCorey thanks Tim, your content is just amazing! You are the best prophet of c# on the internet! 😁
36:46 So how would the environment variable in launchSettings.json be set to production when deploying to production? Wont you need to edit that yourself and recompile the app?
We don't deploy launchSettings.json to production. That's why the environment setting defaults to "production". You don't need to do anything when deploying. Since the file doesn't get deployed, the setting isn't there so the default is used.
@@IAmTimCorey That makes sense now, and I also read the officials docs as well. How would you recommend setting the environment for non-prod environments? Update web.config? Set a system environment variable on the non-prod server? This part still has me scratching my head and Idk if there's a general answer to this
Hi Tim do you have a tutorial for Startup or ConfigureService Class?
I cover Dependency Injection in .NET Core (ConfigureService) in a course: www.iamtimcorey.com/p/dotnet-core-dependency-injection-in-depth
I also use it in various videos, but I don't specifically focus on it.
@@IAmTimCorey is there any promo code?
I was quite disappointed you didn't tackle the ASPNETCORE_ENVIRONMENT variable and how it can be set to stage,production,development on different deployments.
Will these appsettigns work with the GRPC setup? I am having an issue making my GRPC server buildup with dynamic IPs.
Yep. It is a .NET Core project and it is calling the CreateDefaultBuilder in the Program.cs file so it will work.
Hi Tim, Thank you so much one of important topics. I have an .Net 6 Worker Service Project in VS 2022. In my appsettings.json I defined a custom object with one key and value. "LocalSqlServer": { "SqlServerName":"AVD111234" } . I tried fetching this value in my program.cs file by _config.GetSection("LocalSqlServer:SqlServerName").Value . The value comes as null. I tried different ways to fetch it using _config object, also tried how you fetch the same in this video, but no success so far. I don't know where I am going wrong. Do you think it works differently for worker service project ? Or Am I doing any mistake in code. Please help. Thank you in advance.
Hey Tim! Great video. I have a problem with reading the development values tho. Somehow they are not loaded and it does not override the appsettings.json. Even if i try to read values directly from appsettings.Development.json the strings are empty. All other settings that you showed are the same. I am using Core 3.1.
Thank you!
It sounds like you have a mistake somewhere. The process will read the values if they are there and the path is correct.
Do you have a video or course where you use Azure environment keys with appSettings? Nice video by the way.
No, sorry
Maybe you could make a video talking about the ups and downs of developing and debugging a c# backend with Docker. Since Visual Studio adds an easy way to add Docker support.
Thanks! Noted and added to the list
@@IAmTimCorey Already excited 😁. I havent seen any good practical videos talking about Docker and Asp.Net. Most videos are focused only on Docker as a whole. But as you often say, other videos clearly lack context. Which makes it harder to integrate and see the value. Also I believe, Docker is and will be the next big thing. Because it's easier to make a new instance of a programm then to get every concurrency perfect. More CPU cores every year.
PS: I have deep respect for people like you, who put quality videos for free online. I mean you take the time and talk about the important stuff even if it's less popular. When I was experimenting with Java, I had to watch trough hasty and unclear indian tutorials, which was a pain for me. Since then, I never touched Java again 😆. I rather learn C# from you! You deserve a special place in the developer community!
Greetings from Switzerland 🇨🇭
cool thanks. so when i want to deploy project i need to move my sercrets from secrets.json to something else right? the stuff u menstioned at 46:40
Correct, although what is in your secrets.json is typically your local secrets (ones for your local testing environment), so you would be putting your production values in Azure. But yes, the same property names.
Hey Tim, could you share a tip, how to get these massive intellisense, like yours in 14:31? Mine got only 2 first rows
Not sure how I got it to show up. Sorry.
Hey Mr. Corey, I have my VS installed on C: Drive (SSD 500gb) and projects are saved in another drive (HDD). Is this a bad practice? Thank you
My setup is about the same, it should not be a problem.
How to play with appsettings.json for desktop application that you deploy to multiple servers ? Let's say the difference is just the connection string value and we want to add new setting to the file. Is there a better way of adding the new setting to appsettings,json other than manually editing the file ?
For desktop applications, you will need to change the values during deployment (we will be doing this soon in the TimCo Retail Manager series).
Tim! Man I'm so late to the party. I had a September 22nd. birthday so Happy Birthday!!! I'm a patreon member, have been now for a little while. Are there links from your patreon site to still get the coupon for members?
The coupon to get this course on sale have expired (they expired at the end of September). Sorry. And happy belated birthday.
@@IAmTimCorey no worries my man. I appreciate you doing what you do. I’ll pick up the package. I’m the “developing web forms and need to catch up” guy. 😞
I'm trying to get deeper knowledge for settings in c# and was so excited when I saw AppSettings in title, but then got a bit disappointed when I saw its for .Net CORE (I'm still primarily using framework...). Nevertheless, still found this video quite useful.
Is there maybe .NET framework version of this video or some other resource on the topic?
If not, is it planned? :)
No there isn't one (and it isn't planned). In the .NET Framework, you put all of your settings in app.config/web.config and then you do transforms using SlowCheetah or something similar to create environment-specific override files to merge in. Then you do most of your transforms in your CI/CD process.
Hey Tim! Instead of passing the whole Configuration around Pages to get just the settings' section by way of using the IConfiguration, do you not think it's prudent to rather use the Options Pattern by way of using say the IOptionsMonitor here?
I touched on that briefly in this video. It depends. You aren't hurting anything by passing the IConfiguration object around (it isn't recreating the object or using more memory). Using the Options pattern does make your life easier in certain situations though.
@@IAmTimCorey Cheers mate!
I am having a real challenging time attempting to read appsettings keys from within a custom class, is this possible? If so, can you make a video or help me understand how to accomplish this. All the examples I am finding online are reading key values from a controller. I am attempting to use the options pattern for retrieving values and have successfully got them from within the controller but they are null when calling them from a custom class.
Are you passing the IConfiguration object into the class? I believe I do this in the TimCo Retail Manager series (after the upgrade to .NET Core).