Saturday 23 September 2023

"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"00-c0387627b8818a595c0bc7ab040d6cab-1c6bfb2bcbbca2d3-00","errors":{"data2":["The data2 field is required."],"data3":["The data3 field is required."]}}

Reason for Error: This error occurred when we were posting form data to web API and web API accepting input request parameters as [FromForm] and not all input parameters set as [FromForm].

To regenerate the issue following things need to be done.
1. Create dot net core web API

2. Create an HTML page that posts data to web API

Step 1: Web API -> Input variable name should match with hidden field name.

[HttpPost]

public void Read([FromForm] string data1, string data2, string data3)
{

}

Here, 1st input parameter mark [FromForm] but the other is not set.

Step 2: HTML Form that posts data to web API -> Copy Past HTML in Notepad and Save as dot(.) HTML extension -> Change action with your web API URL

<head>

    <title></title>

</head>

<body onload="this.form1.submit()">

    <form id="form1" method="post" action="https://localhost:7178/api/weatherforecast/read" enctype="multipart/form-data">

       <input type="hidden" name="data1" value="yourdata1">

       <input type="hidden" name="data2" value="yourdata2">

       <input type="hidden" name="data3" value="yourdata3">

    </form>

</body>

</html>

Run the web API application and click to open the saved HTML file. You will receive the error message mentioned above.

Solution to fix this issue.

Way 1 – set [FromForm] attributes to the remaining input parameter.

[HttpPost]

public void Read([FromForm] string data1, [FromForm]  string data2, [FromForm]  string data3)
{

}

 

Way 2 – create a class for the input parameters i.e., the same as the HTML hidden field name.

public class FromFormData
{
    public string data1 { get; set; }
    public string data2 { get; set; }
    public string data3 { get; set; }

}

Change web API input parameter with class FromFormData. Here form1 should match with the HTML form ID name.

[HttpPost]

public void Read([FromForm] FromFormData form1)
{

}

Thursday 29 June 2023

Enable the seconds on the Windows 11 clock

Step 1:- Right click on the taskbar => Choose Taskbar settings











Step 2:- Click the down arrow next to Taskbar behaviors


Step 3:- Scroll down bottom => Click the checkbox for "Show seconds in the system tray clock (uses more power)"

Step 4:- Done








Wednesday 21 June 2023

Develop And Deploy Azure WebJobs In Azure App Service

 Step 1: - Create Console application => Click “Next” => Project Name “TestWebJob” => Click “Next“ => Click “Create


























The console application created successfully

Step 2: - Go to application containing folder => expand “bin” folder => expand “Release” folder => select “net6.0” folder and compress to zip








Step 3: - Login to Microsoft Azure Portal

Step 4: - Search “App Service” in search bar => Select Web APP (WebJobUAT) in the list












Step 5:- Select “WebJobs” from the left pane => Click “Add












Step 6:- Fill Details => Click “Create Webjob













Step 7:- Click “Refresh












Step 8:- Click “Run” => Click “Run













Step 9:- Click “Logs












Step 10:- Click “TestWebJob” name












Step 11:- Click “Timing












Step 12:- Job Run Successfully












Step 13:- Delete the “TestWebJob



Merge Multiple PDFs into a single PDF using iTextSharp in C#

Do not forget to install iTextSharp.dll using Manage NuGet Packages

using
iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
 
namespace ConsoleApplication1
{
    public class MergePDF
    {
        public void ProcessMergePDF()
        {
            string[] files = Directory.GetFiles(@"E:\Form\");
            string outputPath = @"E:\Output\Merge.pdf";
            using (Document doc = new Document())
            {
                using (PdfCopy writer = new PdfCopy(doc, new FileStream(outputPath, FileMode.Create)))
                {
                    if (writer == null)
                        return;
                    doc.Open();
                    foreach (string file in files)
                    {
                        using (PdfReader reader = new PdfReader(file))
                        {
                            reader.ConsolidateNamedDestinations();
                            for (int i = 1; i <= reader.NumberOfPages; i++)
                            {
                                PdfImportedPage page = writer.GetImportedPage(reader, i);
                                writer.AddPage(page);
                            }
                        }
                    }
                }
            }
        }
    }

} 

Sunday 18 June 2023

Remove items from one list in another in C#

List<string> list1 = new List<string>() { "A", "B", "C", "D" };
List<string> list2 = new List<string>() { "B", "D" }; 
List<string> list3 = list1.Except(list2).ToList();

Here, in the list3 object, we will get the value A & C.

Convert SSIS recordset into datatable

Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.DataTable'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however, they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

 

DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(); 
da.Fill(dt, Dts.Variables["User::objList"].Value);

Convert Byte array to Base64 string in c#

 string byteString = Convert.ToBase64String(bytes);

How to Generate an SSRS Report as a Password-Protected PDF Using ASP.Net C#

Case scenario, apply password on pdf generated with SSRS report.

DLL Required.


Microsoft.ReportViewer.WebForms.dll
Microsoft.ReportViewer.Common.dll
itextsharp.dll


using iTextSharp.text.pdf;
using Microsoft.Reporting.WebForms;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
 
namespace ConsoleApplication1
{
    public class SSRSReport
    {
        public void Report()
        {
            string path = "Report Path";
            string ssrsURL = "Report Server URL";
            string ssrsUser = "Report Server User";
            string ssrsPass = "Report Server Password";
 
            ReportViewer reportViewer = new ReportViewer();
            reportViewer.ProcessingMode = ProcessingMode.Remote;
            reportViewer.ServerReport.ReportServerCredentials
                = new ReportCredentials(new NetworkCredential(ssrsUser.Trim(), ssrsPass.Trim(), ""));
            reportViewer.ServerReport.ReportServerUrl = new Uri(ssrsURL);
            reportViewer.ServerReport.ReportPath = path;
            reportViewer.ServerReport.SetParameters(new List<ReportParameter>() {
                new ReportParameter("Param1", "Value1"),
                new ReportParameter("Param2", "Value2")
            });
            reportViewer.ServerReport.Refresh();
 
            byte[] bytes = reportViewer.ServerReport.Render("pdf");

            using (MemoryStream inputData = new MemoryStream(bytes))
            {
                using (MemoryStream outputData = new MemoryStream())
                {
                    string pdfPassword = "test@123";
                    PdfReader reader = new PdfReader(inputData);
                    PdfEncryptor.Encrypt(reader, outputData, true, pdfPassword, pdfPassword, PdfWriter.ALLOW_SCREENREADERS);
                    byte[] passwordFileBytes = outputData.ToArray();
 
                    if (!Directory.Exists(@"D:\Report\"))
                        Directory.CreateDirectory(@"D:\Report\");
 
                    File.WriteAllBytes(@"D:\Report\WithoutPassword.pdf", bytes);
                    File.WriteAllBytes(@"D:\Report\WithPassword.pdf", passwordFileBytes);
 
                    //Line of code used in the web application
                    //Response.ContentType = "application/pdf";
                    //Response.AddHeader("content-disposition", "attachment;filename=Sample.pdf");
                    //Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    //Response.BinaryWrite(passwordFileBytes);
                    //Response.End();
                }
            }
        }
    }
}

Monday 10 April 2023

Convert DataTable To JsonString in C#

using System.Data;
using System.Text;
 
DataTable dataTable = new DataTable();
DataRow? dataRow = null;
dataTable.Columns.Add("EmpCode", typeof(string));
dataTable.Columns.Add("EmpName", typeof(string));
 
dataRow = dataTable.NewRow();
dataRow["EmpCode"] = "E0001";
dataRow["EmpName"] = "Ram";
dataTable.Rows.Add(dataRow);
 
dataRow = dataTable.NewRow();
dataRow["EmpCode"] = "E0002";
dataRow["EmpName"] = "Shyam";
dataTable.Rows.Add(dataRow);
 
Console.WriteLine(Utility.ConvertDataTableToJsonString(dataTable));
Console.ReadLine();
 
public class Utility
{
    public static string ConvertDataTableToJsonString(DataTable dataTable)
    {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Append("[");
 
        int totalColumnCount = dataTable.Columns.Count;
        int totalRowCount = dataTable.Rows.Count;
        int rowCount = 0;
 
        foreach (DataRow row in dataTable.Rows)
        {
            rowCount++;
            stringBuilder.Append("{");
 
            int columnCount = 0;
 
            foreach (DataColumn dataColumn in dataTable.Columns)
            {
                columnCount++;
 
                stringBuilder.Append("\"" + dataColumn.ColumnName.ToString() + "\":" + "\"" + row[dataColumn.ColumnName].ToString() + "\"");
 
                if (columnCount != totalColumnCount)
                {
                    stringBuilder.Append(",");
                }
            }
            stringBuilder.Append("}");
 
            if (rowCount != totalRowCount)
            {
                stringBuilder.Append(",");
            }
        }
        stringBuilder.Append("]");
 
        return stringBuilder.ToString();
    }
}

Output