WEB API Throws “No Access-Control-Allow-Origin” Header is present on the requested resource.

This is the error occurs in the Client application that is consuming the WEB API. There might be two different reasons,

Web API by default doesn’t allow Service to be consumed from different domains.

  1.   RESOLVED BY CORS:

 [WEB API APPLICATION]

Open Tools ->   NuGet Package Manager - > Package Manager Console 
And install NuGet packages

Install-Package Microsoft.AspNet.WebApi.Cors

     GO to WebApiConfig.cs

          Add [ using System.Web.Http.Cors;  ] namespace in webapiConfig.cs file

               EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
       CONFIG.EnableCors(cors);


         First star resembles allow requests from all domains, else we can specify specific client URLS, separated by comma (,).

          Second star resembles allow requests for all the headers.

          Third star resembles allow requests for all the methods like POST, GET, PUT, DELETE, etc 


  2.   RESOLVED BY REMOVING HEADERS IN CLIENT REQUEST[AFTER CORS IMPLEMENTATION]

       
While no headers specified in WEB API, just try to remove the headers from the client side.


Read More »

Create WEBAPI Using Console Application and Host as Self-Hosting

We have seen earlier creating WEBAPI selecting WEBAPI project type, also we can create the WEBAPI using Console application.

Soon after listening the word console application we will get a doubt that how the URL of the service is exposed with a generated Executable file (.EXE).

Here we are going to host the application as a Self-Hosting

1.   Create new project


2.   Under Visual C# select Console application as a project type.


3.   Click on Tools ->   NuGet Package Manager - > Package Manager Console.
Install OwinselfHost package for self hosting (internet connection mandatory)

   PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost


4.   If the API is also used to consume as a cross origin, we should install CORS packages (internet connection mandatory)


   PM> Install-Package Microsoft.AspNet.WebApi.Cors


5.   Add new class to the project and name it to Startup.cs [Name should be same for self-Hosting]

Place the below code in Startup.cs


              using System;
using Owin;
using System.Web.Http;
using System.Net.Http;

namespace firstMicroService
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration CONFIG = new HttpConfiguration();
            CONFIG.EnableCors();
            CONFIG.Routes.MapHttpRoute(
                name: "createUserApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
            appBuilder.UseWebApi(CONFIG);
        }
    }
}



6.   Create new class with [EmployeeController.cs] which inherits from ApiController

Place the code as shown below.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Cors;

namespace firstMicroService
{
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Salary { get; set; }
    }

    [EnableCors(origins:"*", headers:"*", methods:"*")]
    public class EmployeeController : ApiController
    {
        Employee[] employees = new Employee[]
        {
            new Employee{Id=0,Name="Morris",Salary="151110"},
            new Employee{Id=1,Name="John", Salary="120000"},
            new Employee{Id=2,Name="Chris",Salary="140000"},
            new Employee{Id=3,Name="Siraj", Salary="90000"}
        };

        public IEnumerable<Employee> Get()
        {
            return employees.ToList();
        }

        public Employee Get(int Id)
        {
            try
            {
                return employees[Id];
            }
            catch (Exception)
            {
                return new Employee();
            }
        }

    }
}



7.   Open Program.cs file and replace with below code.

using Microsoft.Owin.Hosting;
using System;

namespace firstMicroService
{
    class Program
    {
        static void Main(string[] args)
        {
            string domainAddress = "Http://20.201.36.49/";

            using (WebApp.Start(url: domainAddress))
            {
                Console.WriteLine("Service Hosted " + domainAddress);
                System.Threading.Thread.Sleep(-1);
            }
        }
    }
}


9.   Run the application and keep the console open.
                  




10.   Service is written only for GET method, to test the service,

{given Domain address}/{api}/{Given controllername}/{optional id}

In my case am testing the service with POSTMAN REST Client,

http://20.201.36.49/api/Employee/1


Testing Service.



Read More »

Create PUT Method in Web API using .Net

Previously we have seen How to Create a record using POSTmethod and Retrieve the data using GET Method. PUT method is used to update some records that already in database. While using PUT method we will be passing Primary Key value in URI, this is considered as Where condition to update the data.

1.      Create new Project with WEB API as below


This will create the new project of WEBAPI in MVC framework.
  
2.      Right Click on the controllers and add new WEB API Controller as shown below.



Name your WEB API controller accordingly, I have named it as EmployeeController.

3.      Right click on the Model folder and add ADO.NET Entity Data Model as shown below.


    Entity Data Model wizard asks you to select what the model should contain, Select EF designer from Database as shown below.   



  Click on Next and Choose Data Connection by selecting new connection.

    
   After Clicking New Connection, it will prompt the new popup to enter server details, userid, password and selecting the database.



After test connection is successful click on OK and your connection string will get generated as shown below




    Select the Entity framework version and Click the Next button.

   


     Select the Table that is necessary for accessing the data as shown below.


Click on Finish that will generate the EDMX file with table name and columns as shown below.



4.      On EmployeeController.cs we can find multiple functions remove all the except PUT method and replace the code as below.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebApiPutMethod.Models;

namespace WebApiPutMethod.Controllers
{
    public class EmployeeController : ApiController
    {
        public HttpResponseMessage Put(int id, [FromBody]EmployeeDetail employee)
        {
            try
            {
                using (ACT2_MINIQEntities entities = new ACT2_MINIQEntities())
                {
                  var entity = entities.EmployeeDetails.FirstOrDefault(e => e.ID == id);
                  if (entity != null)
                  {
                      entity.Name = employee.Name;
                      entity.Gender = employee.Gender;
                      entity.City = employee.City;
                      entities.SaveChanges();
                      return Request.CreateResponse(HttpStatusCode.OK, entity);
                  }
                  else
                  {
                      return Request.CreateResponse(
                          HttpStatusCode.NotFound,
                          "Employee ID= " + id + " not found"
                          );
                  }
                }
             
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }
        }
    }
}



To Test WEB API we can use fiddler or POSTMAN Chrome Extension 

Output:




Read More »