0
<script type="text/javascript">
    $(document).ready(function () {
        $('#vehiclesTable').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax": {
                "url": "@Url.Action("GetAllVehicles", "Vehicles")",
                "type": "GET",
                "error": function (xhr, error, thrown) {
                    console.log("Error: ", xhr.responseText);
                }
            },
            "columns": [
                { "data": "customerName" },
                { "data": "year" },
                { "data": "make" },
                { "data": "model" },
                { "data": "trim" },
                { "data": "engineSize" },
                { "data": "transmission" },
                { "data": "transmissionType" },
                { "data": "mileage" },
                {
                    "data": "id",
                    "render": function (data, type, row) {
                        return `<a href="/Vehicles/Details/${data}" class="btn btn-info">Details</a>
                                        <a href="/Vehicles/Edit/${data}" class="btn btn-warning">Edit</a>
                                        <a href="/Vehicles/Delete/${data}" class="btn btn-danger">Delete</a>`;
                    },
                    "orderable": false
                }
            ],
            "order": [[0, "asc"]]
        });
    });
</script> 

<- script in index.html 

 [HttpGet]
 public async Task<IActionResult> GetAllVehicles()
 {
     var draw = HttpContext.Request.Query["draw"].FirstOrDefault();
     var start = Request.Query["start"].FirstOrDefault();
     var length = Request.Query["length"].FirstOrDefault();
     var sortColumn = Request.Query["columns[" + Request.Query["order[0][column]"].FirstOrDefault() + "][data]"].FirstOrDefault();
     var sortColumnDirection = Request.Query["order[0][dir]"].FirstOrDefault();
     var searchValue = Request.Query["search[value]"].FirstOrDefault();
     int pageSize = length != null ? Convert.ToInt32(length) : 0;
     int skip = start != null ? Convert.ToInt32(start) : 0;
     int recordsTotal = 0;

     // Fetch all data
     var vehiclesData = _context.Vehicles
      .Include(j => j.Customer)
      .Select(j => new
      {
          j.Id,
          CustomerName = j.Customer.FirstName + " " + j.Customer.LastName,
          j.Year,
          j.Make,
          j.Model,
          j.Trim,
          j.EngineSize,
          j.Transmission,
          j.TransmissionType,
          j.Mileage

      });

     // Search
     if (!string.IsNullOrEmpty(searchValue))
     {
         vehiclesData = vehiclesData.Where(j =>
      j.CustomerName.Contains(searchValue) ||
      j.Year.ToString().Contains(searchValue) ||
      j.Make.Contains(searchValue) ||
      j.Model.Contains(searchValue) ||
      j.Trim.Contains(searchValue) ||
      j.EngineSize.Contains(searchValue) ||
      j.Transmission.Contains(searchValue) ||
      j.TransmissionType.Contains(searchValue) ||
      j.Mileage.Contains(searchValue)
  );

     }

     // Sorting
     if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDirection)))
     {
         var sortExpression = $"{sortColumn} {sortColumnDirection}";
         vehiclesData = vehiclesData.OrderBy(sortExpression);
     }

     // Total number of rows count 
     recordsTotal = vehiclesData.Count();

     // Paging 
     var data = vehiclesData.Skip(skip).Take(pageSize).ToList();

     // Returning Json Data
     var jsonData = new
     {
         draw = draw,
         recordsFiltered = recordsTotal,
         recordsTotal = recordsTotal,
         data = data.Select(v => new
         {
             customerName = v.CustomerName,
             year = v.Year,
             make = v.Make,
             model = v.Model,
             trim = v.Trim,
             engineSize = v.EngineSize,
             transmission = v.Transmission,
             transmissionType = v.TransmissionType,
             mileage = v.Mileage,
             id = v.Id
         })
     };


     return Ok(jsonData);
 }

<- VehiclesController GetAllVehicles()

Again this works great when I run it locally. It just breaks when I push it to Azure.

I tried different calls, routing and every change worked locally but broke when pushed over to Azure. I have another controller with an almost identical call just different data and that ones works perfectly.

4
  • What error are you getting on the console when you deploy your app to azure and invoke this method? Commented Aug 16, 2024 at 18:17
  • I was getting a 404 not found. But when I called the url/Vehicles/GetAllVehicles it returns the correct data. It's just azure not liking the full call url Commented Aug 16, 2024 at 19:37
  • Please trim your code to make it easier to find your problem. Follow these guidelines to create a minimal reproducible example. Commented Aug 17, 2024 at 15:39
  • It works fine when tested locally but does not work when deployed to Azure. It should be related to the length of the get request in azure. The answer below uses decodeURIComponent, which can solve the current issue. Please confirm it. Commented Aug 19, 2024 at 7:20

1 Answer 1

0

Using current code, the url like below:

In local:

https://localhost:port/Vehicles/GetAllVehicles?draw=1&columns%5B0%5D%5Bdata%5D=customerName&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=year&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=make&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=model&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B4%5D%5Bdata%5D=trim&columns%5B4%5D%5Bname%5D=&columns%5B4%5D%5Bsearchable%5D=true&columns%5B4%5D%5Borderable%5D=true&columns%5B4%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B4%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B5%5D%5Bdata%5D=engineSize&columns%5B5%5D%5Bname%5D=&columns%5B5%5D%5Bsearchable%5D=true&columns%5B5%5D%5Borderable%5D=true&columns%5B5%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B5%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B6%5D%5Bdata%5D=transmission&columns%5B6%5D%5Bname%5D=&columns%5B6%5D%5Bsearchable%5D=true&columns%5B6%5D%5Borderable%5D=true&columns%5B6%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B6%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B7%5D%5Bdata%5D=transmissionType&columns%5B7%5D%5Bname%5D=&columns%5B7%5D%5Bsearchable%5D=true&columns%5B7%5D%5Borderable%5D=true&columns%5B7%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B7%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B8%5D%5Bdata%5D=mileage&columns%5B8%5D%5Bname%5D=&columns%5B8%5D%5Bsearchable%5D=true&columns%5B8%5D%5Borderable%5D=true&columns%5B8%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B8%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B9%5D%5Bdata%5D=id&columns%5B9%5D%5Bname%5D=&columns%5B9%5D%5Bsearchable%5D=true&columns%5B9%5D%5Borderable%5D=false&columns%5B9%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B9%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1724050584463

In Azure

https://webapplication****356.azurewebsites.net/Vehicles/GetAllVehicles?draw=1&columns%5B0%5D%5Bdata%5D=customerName&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=year&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=make&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=model&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B4%5D%5Bdata%5D=trim&columns%5B4%5D%5Bname%5D=&columns%5B4%5D%5Bsearchable%5D=true&columns%5B4%5D%5Borderable%5D=true&columns%5B4%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B4%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B5%5D%5Bdata%5D=engineSize&columns%5B5%5D%5Bname%5D=&columns%5B5%5D%5Bsearchable%5D=true&columns%5B5%5D%5Borderable%5D=true&columns%5B5%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B5%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B6%5D%5Bdata%5D=transmission&columns%5B6%5D%5Bname%5D=&columns%5B6%5D%5Bsearchable%5D=true&columns%5B6%5D%5Borderable%5D=true&columns%5B6%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B6%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B7%5D%5Bdata%5D=transmissionType&columns%5B7%5D%5Bname%5D=&columns%5B7%5D%5Bsearchable%5D=true&columns%5B7%5D%5Borderable%5D=true&columns%5B7%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B7%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B8%5D%5Bdata%5D=mileage&columns%5B8%5D%5Bname%5D=&columns%5B8%5D%5Bsearchable%5D=true&columns%5B8%5D%5Borderable%5D=true&columns%5B8%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B8%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B9%5D%5Bdata%5D=id&columns%5B9%5D%5Bname%5D=&columns%5B9%5D%5Bsearchable%5D=true&columns%5B9%5D%5Borderable%5D=false&columns%5B9%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B9%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1724050584463

It seems not decode the url case the issue. I have tried below code by using decodeURIComponent, it works well.

@{
    ViewData["Title"] = "Vehicles List";
}

<h2>Vehicles List</h2>

<table id="vehiclesTable" class="table table-striped table-bordered">
    <thead>
        <tr>
            <th>Customer Name</th>
            <th>Year</th>
            <th>Make</th>
            <th>Model</th>
            <th>Trim</th>
            <th>Engine Size</th>
            <th>Transmission</th>
            <th>Transmission Type</th>
            <th>Mileage</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

@section Scripts {
        <script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
        <script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap4.min.js"></script>

           <script type="text/javascript">
        $(document).ready(function () {
            $('#vehiclesTable').DataTable({
                "processing": true,
                "serverSide": true,
                "ajax": {
                    "url": decodeURIComponent("@Url.Action("GetAllVehicles", "Vehicles")"),
                    "type": "GET",
                    "data": function (d) {
                        var queryParams = $.param(d);
                        return decodeURIComponent(queryParams);
                    },
                    "error": function (xhr, error, thrown) {
                        console.log("Error: ", xhr.responseText);
                    }
                },
                "columns": [
                    { "data": "customerName" },
                    { "data": "year" },
                    { "data": "make" },
                    { "data": "model" },
                    { "data": "trim" },
                    { "data": "engineSize" },
                    { "data": "transmission" },
                    { "data": "transmissionType" },
                    { "data": "mileage" },
                    {
                        "data": "id",
                        "render": function (data, type, row) {
                            return `<a href="/Vehicles/Details/${data}" class="btn btn-info">Details</a>
                                    <a href="/Vehicles/Edit/${data}" class="btn btn-warning">Edit</a>
                                    <a href="/Vehicles/Delete/${data}" class="btn btn-danger">Delete</a>`;
                        },
                        "orderable": false
                    }
                ],
                "order": [[0, "asc"]]
            });
        });
    </script>

        </script>
}

Then the url will be

https://webapplicat****56.azurewebsites.net/Vehicles/GetAllVehicles?draw=1&columns[0][data]=customerName&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=year&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=true&columns[1][search][value]=&columns[1][search][regex]=false&columns[2][data]=make&columns[2][name]=&columns[2][searchable]=true&columns[2][orderable]=true&columns[2][search][value]=&columns[2][search][regex]=false&columns[3][data]=model&columns[3][name]=&columns[3][searchable]=true&columns[3][orderable]=true&columns[3][search][value]=&columns[3][search][regex]=false&columns[4][data]=trim&columns[4][name]=&columns[4][searchable]=true&columns[4][orderable]=true&columns[4][search][value]=&columns[4][search][regex]=false&columns[5][data]=engineSize&columns[5][name]=&columns[5][searchable]=true&columns[5][orderable]=true&columns[5][search][value]=&columns[5][search][regex]=false&columns[6][data]=transmission&columns[6][name]=&columns[6][searchable]=true&columns[6][orderable]=true&columns[6][search][value]=&columns[6][search][regex]=false&columns[7][data]=transmissionType&columns[7][name]=&columns[7][searchable]=true&columns[7][orderable]=true&columns[7][search][value]=&columns[7][search][regex]=false&columns[8][data]=mileage&columns[8][name]=&columns[8][searchable]=true&columns[8][orderable]=true&columns[8][search][value]=&columns[8][search][regex]=false&columns[9][data]=id&columns[9][name]=&columns[9][searchable]=true&columns[9][orderable]=false&columns[9][search][value]=&columns[9][search][regex]=false&order[0][column]=0&order[0][dir]=asc&start=0&length=10&search[value]=&search[regex]=false&_=1724051493112

and works well. Here is the test result.

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.