Dotnet Core Interview Q/A

ASP.NET Core is a Cross-platform, High-performance, Open-source framework for building modern, cloud-enabled, Internet-connected apps. With ASP.NET Core, you can:

  1. Build web apps and services, Internet of Things (IoT) apps, and mobile backends.
  2. Use your favorite development tools on Windows, macOS, and Linux.
  3. Deploy to the cloud or on-premises.

What are some of the new features introduced in the latest version of .NET Core?

The latest version of .NET Core, as of my knowledge cutoff date of September 2021, is .NET 6.0. Some of the new features introduced in this version include:

Performance improvements: .NET 6.0 includes several performance improvements, including faster startup times and reduced memory usage for ASP.NET Core applications.

Single-file applications: .NET 6.0 includes support for building single-file applications, which can simplify deployment and distribution of .NET Core applications.

Hot reload: .NET 6.0 includes support for hot reload, which allows developers to make changes to code while an application is running and see the changes immediately without restarting the application. 

HTTP3 support: .NET 6.0 includes support for HTTP3, the latest version of the HTTP protocol, which can improve performance and security for web applications.

When we should use Dot net Core :
  1. You have cross-platform needs: If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.
  2. You're targeting microservices.
  3. You're using Docker containers.
  4. You need high-performance and scalable systems.
  5. You need side-by-side .NET versions per application.

What are the new features provided by dot net core?

Below are new features provided by dot net core framework  

  1. It is an open-source. So the community can contribute.
  2. It is lightweight and gives high performance.
  3. Dot net core introduced a new webserver called “Kestrel” which can work on cross-platform, it means your web application can run on other platforms like Linux, Mac, etc.
  4. It supports an in-built dependency injection, you do not need to install any third party DLL for it.
  5. Now dot net core unified the MVC Controller and API Controller.
  6. Side-by-side app versioning, It means If I have 2 applications A and B, A can target .NET Core 2.1 and B can target .NET Core 2.2.
  7. Razor pages more code-focused
  8. You can host your application on IIS, Nginx, Docker, Apache, and self-Host.
  9. Configure your appsettings.json based on the hosting environment.
  10. Great support for the cloud.

What is a Host and what’s the importance of Host in ASP.NET Core application?

ASP.NET Core apps require a host in which it is execute. The host is responsible for application startup and lifetime management. Other responsibility of host’s includes ensuring the application’s services and the server are available and properly configured. Don’t confuse yourself with a Server. The host is responsible for starting the app and its management, where the server is responsible for accepting HTTP requests. The host is configured to use a particular server; the server is unaware of its host.

What is the role of IHostingEnvironment interface in ASP.NET Core?

ASP.NET Core offers an interface named IHostingEnvironment, allows you to programmatically retrieve the current environment so you can have an environment-specific behaviour. By default, ASP.NET Core has 3 environments Development, Staging, and Production. 

What is Kestrel?

Kestrel is a fast, new cross-platform web server introduced in dot net core that can run your web application on Linux, macOS, etc.

What is Middleware in ASP.NET Core

A Middleware is nothing but a component (class) which is executed on every request in ASP.NET Core application. In the classic ASP.NET, HttpHandlers and HttpModules were part of request pipeline. Middleware is similar to HttpHandlers and HttpModules where both needs to be configured and executed in each request. Each middleware adds or modifies http request and optionally passes control to the next middleware component. 

By convention, a middleware component is added to the pipeline by invoking a Use... extension method in the Startup.Configure method. For example, to enable rendering of static files, call UseStaticFiles.

public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapRazorPages();
    });
}

ASP.NET Core includes a rich set of built-in middleware. Custom middleware components can also be written.

Static Files

By default, an asp.net core application will not serve static files. The default directory for static files is wwwroot and this directory must be in the root project folder

By default, UseStaticFiles() middleware only serves the static files that are in wwwroot folder. We can also serve static files outside of the wwwroot folder if you want to.

Serving a default document

// Add Default Files Middleware
app.UseDefaultFiles();

// Add Static Files Middleware
app.UseStaticFiles();


Please Note : UseDefaultFiles
must be called before UseStaticFiles to serve the default file. UseDefaultFiles is a URL rewriter that doesn't actually serve the file. It simply rewrites the URL to the default document which will then be served by the Static Files Middleware. The URL displayed in the address bar still reflects the root URL and not the rewritten URL.

If you want to use another document like foo.html for example as your default document, you can do so using the following code.

// Specify foo.html as the default document
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
defaultFilesOptions.DefaultFileNames.Clear();
defaultFilesOptions.DefaultFileNames.Add("foo.html");
// Add Default Files Middleware
app.UseDefaultFiles(defaultFilesOptions);
// Add Static Files Middleware
app.UseStaticFiles();


Program.cs : 
ASP.NET Core Program class file is place where we can create a host for the web application.

UseFileServer Middleware

UseFileServer combines the functionality of UseStaticFiles, UseDefaultFiles and UseDirectoryBrowser middleware. DirectoryBrowser middleware, enables directory browsing and allows users to see files within a specified directory. We could replace UseStaticFiles and UseDefaultFiles middlewares with UseFileServer Middleware. Reference: Click here

UseDeveloperExceptionPage Middleware

UseDeveloperExceptionPage Middleware must be plugged into the request processing pipeline as early as possible, so it can handle the exception and display the Developer Exception Page if the subsequent middleware components in the pipeline raises an exception.

public void Configure(IApplicationBuilder appIHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        DeveloperExceptionPageOptions developerExceptionPageOptions =
                                                    new DeveloperExceptionPageOptions
        {
            SourceCodeLineCount = 10
        };
        app.UseDeveloperExceptionPage(developerExceptionPageOptions);
    }

    app.UseFileServer();

    app.Run(async (context=>
    {
        throw new Exception("Some error processing the request");
        await context.Response.WriteAsync("Hello World!");
    });
}

What is launchsetting.json in ASP.NET Core?
You will find this file in the “Properties” folder in the project root folder.
The settings in this file are used when we run this ASP.NET core project either from Visual Studio or by using .NET Core CLI.
This file is only used on local development machine. We do not need it for publishing our asp.net core application.
If there are certain settings that you want your asp.net core application to use when you publish and deploy your app, store them in appsettings.json file. We usually store our application configuration settings in this file.
We can also have environment specific appsettings.json files. For example, appsettings.Staging.json for the staging environment. In ASP.NET Core, in addition to appsettings.json file, we also have other configuration sources like Environment variables, User Secrets, Command Line Arguments and even our own custom configuration source.

Configuring ASPNETCORE_ENVIRONMENT variable

We use this variable to set the environment for our application. On our local development machine we usually set this environment variable in launchsettings.json file. We can also set it in the operating system if we want to.

Accessing ASPNETCORE_ENVIRONMENT variable value

Out of the box, ASP.NET core provides IHostingEnvironment service which we can use to access ASPNETCORE_ENVIRONMENT variable value. 

public void Configure(IApplicationBuilder appIHostingEnvironment env)
{
    app.Run(async (context=>
    {
        await context.Response.WriteAsync("Hosting Environment: " + env.EnvironmentName);
    });
}

If you have the environment variable set in both the places i.e launchsettings.json file and in the operating system, then the values in launchsettings.json file overrides the value specified at the operating system level.

Useful methods of IHostingEnvironment service

Use the following methods of IHostingEnvironment service to identify the environment in which our application is running.

  • IsDevelopment()
  • IsStaging()
  • IsProduction()

What if you have a custom environment like UAT (User Acceptance Testing) or QA (Quality Assurance) environment. Well, custom environments like these are also supported in ASP.NET core. For example, to check if the environment is UAT, use IsEnvironment() method as shown below.

env.IsEnvironment("UAT")


Setup mvc in asp.net core
Two steps to setup MVC in ASP.NET Core Application

Step 1 : In ConfigureServices() method of the Startup class in Startup.cs file, include the following line. This line of code adds the required MVC services to the dependency injection container in asp.net core.

  public void ConfigureServices(IServiceCollection services)
  {
      services.AddMvc();
  }


Step 2 :
In the Configure() method, add UseMvcWithDefaultRoute() midddleware to our application's request processing pipeline. Modify the code as shown below.

app.UseStaticFiles();
app.UseMvcWithDefaultRoute();

Notice, we placed UseStaticFiles() middleware before UseMvcWithDefaultRoute() middleware. This order is important, because if the request is for a static file like an image, css or JavaScript file, then UseStaticFiles() middleware will handle the request and short-circuit the rest of the pipeline. 

So if the request is for a static file, UseMvcWithDefaultRoute() middleware is not executed, there by avoiding the unnecessary processing. 

On the other hand, if the request is an MVC request, UseStaticFiles() middleware will pass that request to UseMvcWithDefaultRoute() middleware which will handle the request and produces the response.

AddMvc() v/s AddMvcCore()

As the name implies, AddMvcCore() method only adds the core MVC services. On the other hand, AddMvc() method adds all the required MVC services. AddMvc() method calls AddMvcCore() method internally, to add all the core MVC services. So if we are calling AddMvc() method there is no need to explicitly call AddMvcCore() method again.

ASP.NET Core dependency injection 

Registering Services with the ASP.NET Core Dependency Injection Container : 

ASP.NET core provides the following 3 methods to register services with the dependency injection container. The method that we use determines the lifetime of the registered service. Click here

  1. AddSingleton() - As the name implies, AddSingleton() method creates a Singleton service. A Singleton service is created when it is first requested. This same instance is then used by all the subsequent requests. So in general, a Singleton service is created only one time per application and that single instance is used throughout the application life time.
  2. AddTransient() - This method creates a Transient service. A new instance of a Transient service is created each time it is requested. 
  3. AddScoped() - This method creates a Scoped service. A new instance of a Scoped service is created once per request within the scope. For example, in a web application it creates 1 instance per each http request but uses the same instance in the other calls within that same web request.
Startup.cs class

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddSingleton<IEmployeeRepositoryEmployeeRepository>();
}

HomeControllor.cs class

public class HomeController : Controller
{
    private IEmployeeRepo _repo;
    public HomeController(IEmployeeRepo repo)
    {
        _repo = repo;
    }

    public IActionResult Index()
    {
        EmployeeModel model = new EmployeeModel();
        model = _repo.GetEmployee(1);
        return View(model);
    }
}


_ViewImports.cshtml in ASP.NET Core MVC

_ViewImports.cshtml file is usually placed in the Views folder. It is used to include the common namespaces so we do not have to include them in every view that needs those namespaces. Click here  for more.

UseMvc or UseMvcWithDefaultRoute

If you want to define your own route templates and want to have more control over the routes, use UseMvc() method, instead of UseMvcWithDefaultRoute() method.

 //app.UseMvcWithDefaultRoute();
 app.UseMvc(routes =>
  {
    routes.MapRoute("default""{controller=Home}/{action=Index}/{id?}");
  });

 
Attribute Routing
in ASP.NET Core MVC: click here

Tools to install client-side packages

There are many tools that we can use with Visual Studio to install client-side packages like Bootstrap and jQuery. For example we could use tools like Bower, NPM, WebPack etc.

However, we are not going to use any of these tools. We will instead use Library Manager (LibMan for short). Library Manager is a light-weight, client-side library acquisition tool. It downloads client-side libraries and frameworks from the file system or from a CDN (Content Delivery Network).

libman.json file: libman.json is the Library Manager manifest file. This file contains the entry for the library that installed. We can directly edit the manifest file to install client-side packages, instead of using the user interface provided by LibMan. Click here

What are Tag Helpers

Tag Helpers are server side components. They are processed on the server to create and render HTML elements in Razor files. 

<a asp-controller="home" asp-action="details" asp-route-id="@employee.Id">View</a>

generates

<a href="/Home/details/5">View</a>


What is EF Core

EF Core is an ORM (Object-Relational Mapper).

EF core is lightweight, extensible, and open source software. Like .NET Core, EF Core is also cross platform. It works on windows, Mac OS, and Linux. EF core is Microsoft’s official data access platform.

What is ORM

ORM stands for Object-Relational Mapper and it enables developers to work with a database using business objects. As a developer we work with the application business objects and the ORM generates the SQL that the underlying database understands. In-short, an ORM, eliminates the need for most of the data-access code that developers usually need to write. 

EF Core Database First Approach

Sometimes we may have an existing database. When we have a database and the database tables already, we use the database first approach. With the database first approach, EF Core creates the DBContext and Domain classes based on the existing database schema.

EF Core Database Providers

EF Core supports many relational and even non relational databases. EF Core is able to do this by using plug-in libraries called the database providers. These database providers are available as NuGet packages. 

List of EF Core Database Providers

https://docs.microsoft.com/en-us/ef/core/providers/

A database provider, usually sits between EF Core and the database it supports. The database provider contains the functionality specific to the database it supports. Functionality that is common to all the databases is in the EF Core component. Functionality that is specific to a database, for example, Microsoft SQL Server specific functionality is with-in the SQL Server provider for EF Core. 

To install Entity Framework Core and to be able to use SQL server as the database for your application, you need to install the following nuget packages.

Microsoft.EntityFrameworkCore.SqlServer - This nuget package contains SQL Server specific functionality

Microsoft.EntityFrameworkCore.Relational - This nuget package contains functionality that is common to all relational databases

Microsoft.EntityFrameworkCore - This nuget package contains common entity frameowrk core functionality

When we install Microsoft.EntityFrameworkCore.SqlServer package, it also installs all the other dependant nuget packages automatically. 

DbContext in entity framework core

One of the very important classes in Entity Framework Core is the DbContext class. This is the class that we use in our application code to interact with the underlying database. It is this class that manages the database connection and is used to retrieve and save data in the database.

To use the DbContext class in our application We create a class that derives from the DbContext class.
DbContext class is in Microsoft.EntityFrameworkCore namespace.

public class AppDbContext : DbContext
{ }


For the DbContext class to be able to do any useful work, it needs an instance of the DbContextOptions class.
 The DbContextOptions instance carries configuration information such as the connection string, database provider to use etc.
To pass the DbContextOptions instance we use the constructor as shown in the example below.

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions[AppDbContextoptions)
        : base(options)
    {
    }
    public DbSet[EmployeeEmployees { getset; }
}

The DbContext class includes a DbSet[TEntity] property for each entity in the model.

Using sql server with entity framework core

When using Entity Framework Core, one of the important things that we need to configure is the database provider that we plan to use.  Click here

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContextPool[AppDbContext](options =>
      options.UseSqlServer(_config.GetConnectionString("EmployeeDBConnection")));

    services.AddMvc().AddXmlSerializerFormatters();
    services.AddTransient[IEmployeeRepositoryMockEmployeeRepository]();
}

We want to configure and use Microsoft SQL Server with entity framework core. We usually specify this configuration in ConfigureServices() method in Startup.cs file.

We can use either AddDbContext() or AddDbContextPool() method to register our application specific DbContext class with the ASP.NET Core dependency injection system.

The difference between AddDbContext() and AddDbContextPool() methods is, AddDbContextPool() method provides DbContext pooling.

With DbContext pooling, an instance from the DbContext pool is provided if available, rather than creating a new instance.

DbContext pooling is conceptually similar to how connection pooling works in ADO.NET.

From a performance standpoint AddDbContextPool() method is better over AddDbContext() method.

UseSqlServer() extension method is used to configure our application specific DbContext class to use Microsoft SQL Server as the database.

To connect to a database, we need the database connection string which is provided as a parameter to UseSqlServer() extension method

Instead of hard-coding the connection string in application code, we store it appsettings.json configuration file.

{
    "ConnectionStrings": {
      "EmployeeDBConnection": "server=(localdb)\\MSSQLLocalDB;database=EmployeeDB;
Trusted_Connection=true"
    }
  }

To read connection string from appsettings.json file we use IConfiguration service GetConnectionString() method.

Entity framework core migrations- Click hereClick here

Migration is an entity framework core feature that keeps the database schema and our application model classes (also called entity class) in sync.

If you have not executed at-least the initial migration in your application you might get the following SqlException

SqlException: Cannot open database "EmployeeDB" requested by the login.

This is because we do not have the database created yet. One way to create the database is by 

  • Creating a migration first and then
  • Executing that migration

We will be using the following commands to work with migrations in entity framework core.

Add-Migration: Adds a new migration
Update-Database: Updates the database to a specified migration
Remove-Migration: It only removes one migration at a time and that too only the latest migration that is not yet applied to the database. If all the migrations are already applied, executing Remove-Migration command throws the following exception.

Creating a Migration in Entity Framework Core

The following command creates the initial migration. InitialCreate is the name of the migration.

Add-Migration InitialCreate

When the above command completes, you will see a file in the "Migrations" folder that contains the name InitialCreate.cs. This file has the code required to create the respective database tables.

Update-Database in Entity Framework Core

We need to execute the migration code to create the tables. If the database does not exist already, it creates the database and then the database tables. For updating the database, we use Update-Database command. To the Update-Database command we may pass the migration name we want to execute. If no migration is specified, the command by default executes the last migration.

Entity framework core seed data Click here

If you are using Entity Framework Core 2.1 or later there is a new method of seeding database data. In your application DbContext class, override OnModelCreating() method.

HasData() method configures entity to have the specified seed data.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity[Employee]().HasData(
        new Employee
        {
            Id = 1,
            Name = "Mark",
            Department = Dept.IT,
            Email = "mark@pragimtech.com"
        }
    );
}

File upload in asp.net core mvc: Click here

Centralised 404 error handling in ASP NET Core Click here

Along the way, we will discuss the following 3 middleware components that deal with status code pages in asp.net core

  1. UseStatusCodePages
  2. UseStatusCodePagesWithRedirects
  3. UseStatusCodePagesWithReExecute

Types of 404 errors

In ASP.NET Core there are 2 types of 404 errors that could happen

  1. Type 1 : Resource with the specified ID does not exit. 
  2. Type 2 : The provided URL does not match any route in our application. 

The following is code in Configure() method of Startup class in Startup.cs file. As you might already know, this Configure() method configures the HTTP request processing pipeline for our asp.net core application. 

public void Configure(IApplicationBuilder appIHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseStaticFiles();

    app.UseMvc(routes =]
    {
        routes.MapRoute("default""{controller=Home}/{action=Index}/{id?}");
    });
}


UseStatusCodePages Middleware

This is the least useful of the 3 status code middleware components. For this reason, we rarely use it in a real world production application. To use it in an application and see what it can do, plug it into the http processing pipeline as shown below.

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseStatusCodePages();
}

With UseStatusCodePages Middleware configured, if we navigate to a url which does not exist, it returns simple text response.

UseStatusCodePagesWithRedirects Middleware

In a production quality application we want to intercept these non-success http status codes and return a custom error view. To achieve this, we can either use UseStatusCodePagesWithRedirects middleware or UseStatusCodePagesWithReExecute middleware.

if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseStatusCodePagesWithRedirects("/Error/{0}");
    }

With the following line in place, if there is a 404 error, the user is redirected to /Error/404. The placeholder {0}, in "/Error/{0}" will automatically receive the http status code.

Difference between UseStatusCodePagesWithRedirects and UseStatusCodePagesWithReExecute

  1. UseStatusCodePagesWithRedirects : Send 302 to Client. It redirects you to error controller action method.
  2. UseStatusCodePagesWithReExecute : Send Original Status Code and Executes handler for redirect URL. UseStatusCodePagesWithReExecute is just rendering page with out redirecting.
  3. Click here for more in detail

Global exception handling in asp net core mvc Click here

Step 1 : For a non-development environment, add the Exception Handling Middleware to the request processing pipeline using UseExceptionHandler() method. We do this in the Configure() method of the Startup class. Exception Handling Middleware looks for ErrorController.

public void Configure(IApplicationBuilder appIHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }

    // Rest of the code
}

Step 2 : Implement the ErrorController that retrieves the exception details and returns the custom Error view. 

Step 3 : Implement Error View

Logging exceptions in ASP NET Core 

Inject an instance of ILogger where you need the logging functionality

private readonly ILogger[ErrorControllerlogger;

public ErrorController(ILogger[ErrorControllerlogger)
{
    this.logger = logger;
}

  • LogError() method logs the exception under Error category. 
  • LogWarning() method logs the message under Warning category.

ASP.NET Core Identity 

ASP.NET Core Identity is a membership system. It allows us to create, read, update and delete user accounts. Supports account confirmation, authentication, authorization, password recovery, two-factor authentication with SMS. It also supports external login providers like Microsoft, Facebook, Google etc. We will discuss implementing these features in our upcoming videos in this series. Click here

The following are the steps to add and configure ASP.NET Core Identity

Step 1 : Inherit from IdentityDbContext class

public class AppDbContext : IdentityDbContext
{
    // Rest of the code
}


Step 2 : Add ASP.NET Core Identity Services

services.AddIdentity[IdentityUserIdentityRole]()
        .AddEntityFrameworkStores[AppDbContext]();


Step 3 : Add Authentication middleware to the request pipeline

public void Configure(IApplicationBuilder appIHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseAuthentication();
    app.UseMvc(routes =]
    {
        routes.MapRoute("default""{controller=Home}/{action=Index}/{id?}");
    });
}


Step 4 : Add Identity Migration:
 This migration contains code that creates the tables required by the ASP.NET Core Identity system.

Step 5 : Generate ASP.NET Core Identity Tables

ASP NET Core Identity UserManager and SignInManager Click here

Create a new user, using UserManager service provided by asp.net core identity:

UserManager<IdentityUser> class contains the required methods to manage users in the underlying data store. For example, this class has methods like CreateAsync, DeleteAsync, UpdateAsync to create, delete and update users.

Sign-in a user using SignInManager service provided by asp.net core identity:

SignInManager<IdentityUser> class contains the required methods for users signin. For example, this class has methods like SignInAsync, SignOutAsync to signin and signout a user.

Both UserManager and SignInManager services can be injected into the AccountController using constructor injection

ASP NET core remote validation

Remote validation allows a controller action method to be called using client side script. This is very useful when you want to call a server side method without a full page post back.

ASP.NET Core MVC uses jQuery remote() method which in turn issues an AJAX call to invoke the server side method.  Click here

[Remote(action"IsEmailInUse"controller"Account")]
public string Email { getset; }


Extend IdentityUser in ASP NET Core Click here

public class ApplicationUser : IdentityUser
{
    public string City { getset; }
}

You can name the class that extends the IdentityUser class anything you want.In the example below, ApplicationUser class extends the IdentityUser class. We have included just one custom property City, but you can include as many properties as you want.

Creating roles in asp net core

To create a user in asp.net core we use UserManager class. Similarly, to create a role, we use RoleManager class provided by asp.net core.

The built-in IdentityRole class represnts a Role.

RoleManager class performs all the CRUD operations i.e Creating, Reading, Updating and Deleting roles from the underlying database table AspNetRoles Click here

What is the use of "Map" extension while adding middleware to ASP.NET Core pipeline?
It is used for branching the pipeline. It branches the ASP.NET Core pipeline based on request path matching. If request path starts with the given path, middleware on to that branch will execute.

public void Configure(IApplicationBuilder app)
{
app.Map("/path1"Middleware1);
app.Map("/path2"Middleware2);
}





0 comments:

Post a Comment

Topics

ADFS (1) ADO .Net (1) Ajax (1) Angular (43) Angular Js (15) ASP .Net (14) Authentication (4) Azure (3) Breeze.js (1) C# (47) CD (1) CI (2) CloudComputing (2) Coding (7) CQRS (1) CSS (2) Design_Pattern (6) DevOps (4) DI (3) Dotnet (8) DotnetCore (16) Entity Framework (2) ExpressJS (4) Html (4) IIS (1) Javascript (17) Jquery (8) Lamda (3) Linq (11) microservice (3) Mongodb (1) MVC (46) NodeJS (8) React (11) SDLC (1) Sql Server (32) SSIS (3) SSO (1) TypeScript (1) UI (1) UnitTest (1) WCF (14) Web Api (15) Web Service (1) XMl (1)

Dotnet Guru Archives