Advertisement

Advertisement

Cascading Country, State, City DDL in asp.net core mvc app consuming asp.net core web api using code 1st approach

Cascading Country, DDL in asp.net core mvc app consuming asp.net core web api (w/o make service in api n web, thur hardcode url to get data on web) using code 1st approach


Step 1. Create asp.net core web api project.


Step 2. Install nuget package.

            EntityFrameworkCore

            EntityFrameworkCore.SqlServer

            EntityFrameworkCore.Tools


 <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />

<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0">

 <PrivateAssets>all</PrivateAssets>

 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

</PackageReference>


Step 3. Apply Connection string in appsettings.json

,

    "ConnectionStrings": {

        "DefaultConnection": "Server=DESKTOP-9M9EDAA\\SQLEXPRESS; Database=DbAbpDec; Trusted_Connection= True; MultipleActiveResultSets=True; TrustServerCertificate=True;",

        "providerName": "System.Data.SqlClient"


Step 4. Create Models in Models  folder


i)Country.cs


using System;

using System.Collections.Generic;


namespace CityApi.Models;


public partial class Country

{

    public int CountryId { get; set; }


    public string Name { get; set; } = null!;


    public virtual ICollection<State> States { get; set; } = new List<State>();

}


ii) State.cs

using System;

using System.Collections.Generic;


namespace CityApi.Models;


public partial class State

{

    public int StateId { get; set; }


    public string Name { get; set; } = null!;


    public int CountryId { get; set; }


    public virtual ICollection<City> Cities { get; set; } = new List<City>();


    public virtual Country Country { get; set; } = null!;

}


iii) City.cs


using System;

using System.Collections.Generic;


namespace CityApi.Models;


public partial class City

{

    public int CityId { get; set; }


    public string Name { get; set; } = null!;


    public int StateId { get; set; }


    public virtual State State { get; set; } = null!;

}


Step 5. Make Data folder and Create DbAbpDecContext file


DbAbpDecContext .cs


using System;

using System.Collections.Generic;

using Microsoft.EntityFrameworkCore;


namespace CityApi.Models;


public partial class DbAbpDecContext : DbContext

{

    public DbAbpDecContext()

    {

    }


    public DbAbpDecContext(DbContextOptions<DbAbpDecContext> options)

        : base(options)

    {

    }


    public virtual DbSet<City> Cities { get; set; }


    public virtual DbSet<Country> Countries { get; set; }


    public virtual DbSet<State> States { get; set; }


    

Step 6. AddDbContext service in  Program.cs

 

builder.Services.AddDbContext<DbAbpDecContext>(options =>

options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));



Step 7. Create LocationController 


using CityApi.Models;

using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.Mvc;

using Microsoft.EntityFrameworkCore;


namespace CityApi.Controllers

{

[Route("api/[controller]")]

[ApiController]

public class LocationController : ControllerBase

{

private readonly DbAbpDecContext _db;


public LocationController(DbAbpDecContext db)

{

_db = db;

}


// Get all Cities (GET)

[HttpGet]

public async Task<IActionResult> GetCities()

{

try

{

// Cities ko asynchronously fetch karte hain

var cities = await _db.Cities.ToListAsync();


// Agar Cities list null ya empty ho

if (cities == null || !cities.Any())

{

return NotFound("No cities found.");

}


// Agar cities milti hain, to OK response bhejte hain

return Ok(cities);

}

catch (Exception ex)

{

// Agar koi exception aata hai to 500 Internal Server Error bhejte hain

return StatusCode(500, $"Internal server error: {ex.Message}");

}

}

// Get all States (GET)

[HttpGet]

public async Task<IActionResult> GetStates()

{

try

{

// States ko asynchronously fetch karte hain

var states = await _db.States.ToListAsync();


// Agar States list null ya empty ho

if (states  == null || !states.Any())

{

return NotFound("No states found.");

}


// Agar states milti hain, to OK response bhejte hain

return Ok(states );

}

catch (Exception ex)

{

// Agar koi exception aata hai to 500 Internal Server Error bhejte hain

return StatusCode(500, $"Internal server error: {ex.Message}");

}

}


// Get all Countries (GET)

[HttpGet]

public async Task<IActionResult> GetCountries()

{

try

{

// Countries ko asynchronously fetch karte hain

var countries = await _db.Countries.ToListAsync();


// Agar countries list null ya empty ho

if (countries   == null || !countries.Any())

{

return NotFound("No countries found.");

}


// Agar countries milti hain, to OK response bhejte hain

return Ok(countries);

}

catch (Exception ex)

{

// Agar koi exception aata hai to 500 Internal Server Error bhejte hain

return StatusCode(500, $"Internal server error: {ex.Message}");

}

}



}

}



=====================================================

Consume api in .net core mvc app.


Step 8. Create .net core mvc app.


Step 9. Install nuget package 

            Newtonsoft.Json

<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />


Step 10. Apply Api BaseUrl in appsettings.json

,

    "ApiSettings": {

        "BaseUrl": "https://localhost:7287/"

    }


Step 11. Create Model (Copy paste models from api models)


Step 12. Create LocationController 


using CityWebApp.Models;

using Microsoft.AspNetCore.Mvc;

using Microsoft.AspNetCore.Mvc.Rendering;


namespace CityWebApp.Controllers

{

    public class LocationController : Controller

    {

        private readonly IHttpClientFactory _httpClientFactory;


        public LocationController(IHttpClientFactory httpClientFactory)

        {

            _httpClientFactory = httpClientFactory;

        }


        public async Task<IActionResult> Index()

        {

            var client = _httpClientFactory.CreateClient();

            var countries = await client.GetFromJsonAsync<List<Country>>("https://localhost:7196/api/country");

            ViewBag.Countries = new SelectList(countries, "CountryId", "Name");

            return View();

        }


        [HttpGet]

        public async Task<JsonResult> GetStates(int countryId)

        {

            var client = _httpClientFactory.CreateClient();

            var states = await client.GetFromJsonAsync<List<State>>("https://localhost:7196/api/state");

            var statesList = states.Where(s => s.CountryId == countryId).ToList();

            return Json(statesList);

        }


        [HttpGet]

        public async Task<JsonResult> GetCities(int stateId)

        {

            var client = _httpClientFactory.CreateClient();

            var cities = await client.GetFromJsonAsync<List<City>>("https://localhost:7196/api/city");

            var citiesList = cities.Where(c => c.StateId == stateId).ToList();

            return Json(citiesList);

        }

    }

}




Cascading Country, State, City DDL in asp.net core mvc app consuming asp.net core web api using code 1st approach Cascading Country, State, City DDL in asp.net core mvc app consuming asp.net core web api using code 1st approach Reviewed by Rikesh on December 27, 2024 Rating: 5

No comments:

Powered by Blogger.