16May

Create Restful service using Web API

What is Asp.Net Web API?

Asp.Net Web API is a framework for building HTTP services that can be consumed by a broad range of clients including browsers, mobiles, iphone and tablets. It is very similar to ASP.NET MVC since it contains the MVC features such as routing, controllers, action results, filter, model binders, IOC container or dependency injection. But it is not a part of the MVC Framework. It is a part of the core ASP.NET platform and can be used with MVC and other types of Web applications like Asp.Net WebForms. It can also be used as an stand-alone Web services application.

ASP.NET Web API was previously called as WCF Web API and recently merged into ASP.NET MVC 4 beta. The ASP.NET Web API comes with its own controller called ApiController. So now we got two types of controllers while developing MVC applications: one is the default MVC Controller and the other one is the ApiController. Choosing the right controller for the right job is important. For creating REST services we have to use the ApiController, basically these controllers return data. For returning views (aspx, cshtml) we have to use the default controller. In our sample we are going to create a service that returns only data and hence we go with ApiController. So let us create an restful service using Web API repository pattern .

Step 1: Let’s create a new ASP.NET MVC 4 web application.

create project

 

Step 2: Select an empty template

empty project

 

The solution contains lot of things that we don’t require for creating a service like Content,ScriptsViews etc.

Step 3: In Global.asax.cs, there will be already two routes defined: one is for the mvc controller and the other one for the api controller.

 

public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

    routes.MapHttpRoute(

        name: "DefaultApi",

        routeTemplate: "api/{controller}/{id}",

        defaults: new { id = RouteParameter.Optional }

    );

 

    routes.MapRoute(

        name: "Default",

        url: "{controller}/{action}/{id}",

        defaults: new { controller = "Home", action = "Index", id =

                UrlParameter.Optional }

    );

}

 

Since we are going to create a service that will return only data, remove the mvc controller’s route and modify the other accordingly.

 

public static void RegisterRoutes(RouteCollection routes)

{

    routes.MapHttpRoute(

        name: "Default",

        routeTemplate: "{controller}/{id}",

        defaults: new { id = RouteParameter.Optional }

    );

 

 

Step 4: Next thing we have to do is create the model Employee.

 

public class Employee

{

    public int EmployeeID { get; set; }

 

    public string EmployeeName { get; set; }

 

    public string Designation  { get; set; }

 

    public DateTime EMailId { get; set; }

}

 

Step 5: Create a controller that exposes methods. The "Add Controller" window displays different useful scaffolding options but I’m interested on the "API Controller with empty read/write actions".

 

public class EmployeesController : ApiController

{

    // GET /api/employees

    public IEnumerable Get()

    {

       return new string[] { "value1", "value2" };

    }

 

    // GET /api/employees/5

    public string Get(int id)

    {

       return "value";

    }

 

    // POST /api/employees

    public void Post(string value)

    {

    }

 

    // PUT /api/employees/5

    public void Put(int id, string value)

    {

    }

 

    // DELETE /api/employees/5

    public void Delete(int id)

    {

    }

}

 

If you notice our EmployeesController it is derived from the new ApiController. The controller contains methods to get all the employees, get a emplyee by Id, create new employee, edit a employee and delete a employee. Any method starts with Get is automatically mapped with the HTTP GET method, any method that starts with Post is automatically mapped with the HTTP POST method and so on.

public class EmployeesController : ApiController

{

    public IEnumerable Get()

    {

        throw new NotImplementedException();

    }

 

    public Employees Get(int id)

    {

        throw new NotImplementedException();

    }

 

    public HttpResponseMessage Post(Employees employee)

    {

        throw new NotImplementedException();

    }

 

    public Employees Put(Employees employee)

    {

        throw new NotImplementedException();

    }

 

    public HttpResponseMessage Delete(int id)

    {

        throw new NotImplementedException();

    }

}

 

 

Step 6: Create an IEmployeesRepository interface repository as we are using the repository pattern

public interface IEmployeesRepository

{

    IEnumerable Get();

 

    Employees Get(int id);

 

    Employees Post(Employees employees);

 

    Employees Put(Employees employees);

 

    bool Delete(int id);

}

 

Step 7: Implement IEmployeesRepository methods in EmployeeRepository.cs class file

public class EmployeesRepository : IEmployeesRepository

{

 privatestaticSampleDBEntities dataContext = newSampleDBEntities();

 

 public static List GetAllEmployees()

    {

        var query = from employee in dataContext.Employees

                    select employee;

        return query.ToList();

    }

 

public static Employee GetEmployee(int EmployeeID)

    {

        var query = from employee in dataContext.Employees

                    where employee.EmployeeID == EmployeeID

                    select employee;

        return query.SingleOrDefault();

    } 

 

 public static List InsertEmployee(Employee e)

    {

        dataContext.Employees.Add(e);

        dataContext.SaveChanges();

        return GetAllEmployees();

    }

 

 public static List UpdateEmployee(Employee e)

    {

        var emp = (from employee in dataContext.Employees

                   where employee.EmployeeID == e.EmployeeID

                   select employee).SingleOrDefault();

        emp.EmployeeName = e.EmployeeName;

        emp.Designation = e.Designation;       

        emp.EMailID = e.EMailID;     

        dataContext.SaveChanges();

        return GetAllEmployees();

    }

 

    public static List DeleteEmployee(Employee e)

    {

        var emp = (from employee in dataContext.Employees

                   where employee.EmployeeID == e.EmployeeID

                   select employee).SingleOrDefault();

        dataContext.Employees.Remove(emp);

        dataContext.SaveChanges();

        return GetAllEmployees();

    }

}

 

 

Step 8: In Employees controller inject your IEmployeesRepository interface in the controller instance.

public class EmployeesController : ApiController

{

    private readonly IEmployeesRepository _employeeRepository;

 

    public EmployeesController(IEmployeesRepository employeeRepository)

    {

        _employeeRepository = employeeRepository;

    }

 

// GET api/employees

    [Route("api/employees")]

    publicHttpResponseMessage Get()

    {

        var employees= _employeeRepository.GetAllEmployees();

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 

    // GET api/employees/5

    [Route("api/ptemployees/{id?}")]

    publicHttpResponseMessage Get(intid)

    {

        var employees = _employeeRepository.GetEmployee(id);

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 

    [Route("api/employees/{name}")]

    publicHttpResponseMessage Get(stringname)

    {

        var employees = _employeeRepository.SearchEmployeesByName(name);

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 

    [Route("api/employees")]

    publicHttpResponseMessage Post(Employee e)

    {

        var employees = _employeeRepository.InsertEmployee(e);

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 

    [Route("api/employees")]

    publicHttpResponseMessage Put(Employee e)

    {

        var employees = _employeeRepository.UpdateEmployee(e);

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 

    [Route("api/employees")]

    publicHttpResponseMessage Delete(Employee e)

    {

        var employees = _employeeRepository.DeleteEmployee(e);

        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);

        returnresponse;

    }

 }

 

Our service is ready to be exposed to the client and can be hosted in IIS or through Self-Hosting.

 

Related

What are Frames? How to handle frames in Selenium WebDriver with C#?

IFrame (FullForm: Inline Frame) is an HTML document that is included in another HTML document and is...

Read More >

What is Synchronization? Handling Synchronization in Selenium WebDriver using C#:

Synchronization meaning: when two or more components involved to perform any action, we expect these...

Read More >

Sending Test reports by Email using Office 365, Gmail

Wouldn’t it be great if Test Report are sent automatically across team as soon the Test Execut...

Read More >

Token Based Authentication for Web API's

Securing ASP.NET Web API using Custom Token Based AuthenticationProviding a security to the Web API&...

Read More >

ASP.NET: Audit Trail Implementation using Entity Framework

When you are working with certain projects which involves the Customer records, you might need to tr...

Read More >

Create custom project templates in Visual Studio

Visual studio installation comes with the various predefined project templates, and we can use one o...

Read More >

WCF SOAP and REST Services

WCF (Windows Communication Foundation) is a programming platform and runtime system for building, co...

Read More >

What's New In C# 6.0?

Microsoft has released the preview version of Visual Studio 2015 and .NET 4.6 for developers to try ...

Read More >

Creating an RDLC report in Asp.Net

Step 1.  Create a new website and Add DataSet to the WebsiteRight Click on the project, Add new...

Read More >

How to add Overlay in Windows phone 8

Windows Phone is windows mobile operating system from Microsoft.In my project, there was a requireme...

Read More >

Share

Post a Comment

  • Recent
  • Popular
  • Tag
Monthly Archive
Subscribe
Name

Contact Us
  • *
  • *