Monday, 29 June 2015

Exception Handling in ASP.NET Web API

In this article the focus is to handle exceptions for ASP.NET Web API service. HttpResponseException class plays its role to return HTTP status code as well as further exception details to client.

We can simply return respective error status code from Web API service instead of a 500 generic error code i.e.Internal Server Error

Now, we have Web API service controller StudentController having  GET method taking "Id" as parameter and returns a student against it. If student doesn't exists against a provided student Id, then we can handle and throw the exception with respective status code i.e. "Not Found".

After adding the exception handling code using HttpResponseException class, GET method implementation will be as follows:


public Student Get(string id)
        {
            Student student = StudentRepository.GetStudent(id);
            if (student == null)
                throw new HttpResponseException(HttpStatusCode.NotFound);

            return student;

        }

It looks nice to return logical status code back to client but what if we wanted to add more error details?
ASP.NET Web API allows us to create response message using HttpResponseMessage class and pass it toHttpResponseException
HttpResponseMessage represents a returning response message having following important properties:
  • StatusCode is HTTP response status code i.e. NotFound in our case.
  • ResonPhrase to return the exception reason along with status code.
  • Content property can be used to set or get HTTP response content.
 public Student Get(string id)
        {
            Student student = StudentRepository.GetStudent(id);
            if (student == null)
            {
                HttpResponseMessage responseMessage = new HttpResponseMessage();
                responseMessage.StatusCode = HttpStatusCode.NotFound;
                responseMessage.ReasonPhrase = "Student not found";
                responseMessage.Content = new StringContent("No student exists against provided student id");

                throw new HttpResponseException(responseMessage);
            }
            return student;
        }

Note: Remember one important thing about HttpResponseMessage class. Initially, we can easily create a type and pass it to HttpResponseMessage class constructor and return that message with data. But now we can only use Content property to set message content.

Hopefully, this web application development tutorial will be helpful in order to understand and implement exception handling in ASP.NET Web API services.
Continue Reading →

Thursday, 25 June 2015

MVC Important Links

Continue Reading →

Tuesday, 2 June 2015

Factory Design Pattern - C#

Design patterns are general reusable solutions to common problems that occurred in software designing. There are broadly 3 categories of design patterns, i.e., Creational, Behavioral and Structural.

Now, Factory Design Pattern falls under the category of creational design pattern.
Factory design pattern is one of the common design pattern  in software project. Let’s understand the basic of Factory design patern.


         It deals with the problem of creating objects without specifying the exact class of object that will be created. The essence of this pattern is to "Define an interface for creating an object, but let the classes that implement the interface decide which class to instantiate. 

Definition:Factory it's such a Design Pattern which defines an interface for creating an object, but lets the classes that implement the interface decide which class to instantiate. Factory Pattern lets a class postpone instantiation to sub-classes.

Factory design pattern is one of the common design pattern  in software project. Let’s understand the basic of Factory design pattern.


See the Simplest Example Code Factory Pattern Example Code in C#

Factory Method Pattern - UML Diagram & Implementation

The UML class diagram for the implementation of the factory method design pattern is given below:


The classes, interfaces and objects in the above UML class diagram are as follows:

Product
This is an interface for creating the objects.

ConcreteProduct
This is a class which implements the Product interface.

Creator
This is an abstract class and declares the factory method, which returns an object of type Product.

ConcreteCreator
This is a class which implements the Creator class and overrides the factory method to return an instance of a ConcreteProduct.

C# - Implementation Code

interface Product
{

}

class ConcreteProductA : Product
{
}

class ConcreteProductB : Product
{
}

abstract class Creator
{
    public abstract Product FactoryMethod(string type);
}

class ConcreteCreator : Creator
{
    public override Product FactoryMethod(string type)
    {
        switch (type)
        {
            case "A": return new ConcreteProductA();
            case "B": return new ConcreteProductB();
            default: throw new ArgumentException("Invalid type", "type");
        }
    }
}

Factory Method Pattern - Example


Who is what?

The classes, interfaces and objects in the above class diagram can be identified as follows:

IFactory - Interface
Scooter & Bike - Concreate Product classes
VehicleFactory - Creator
ConcreteVehicleFactory - Concreate Creator

namespace FactoryDesignPattern
{
    /// <summary>
    /// The 'Product' interface
    /// </summary>
    public interface IFactory
    {
        void Drive(int miles);
    }

    /// <summary>
    /// A 'Concrete Scooter' class
    /// </summary>
    public class Scooter : IFactory
    {
        public void Drive(int miles)
        {
            Console.WriteLine("Drive the Scooter : " + miles.ToString() + "km");
        }
    }

    /// <summary>
    /// A 'Concrete Bike' class
    /// </summary>
    public class Bike : IFactory
    {
        public void Drive(int miles)
        {
            Console.WriteLine("Drive the Bike : " + miles.ToString() + "km");
        }
    }

    /// <summary>
    /// The Creator Abstract Class
    /// </summary>
    public abstract class VehicleFactory
    {
        public abstract IFactory GetVehicle(string Vehicle);

    }

    /// <summary>
    /// A 'ConcreteCreator' class
    /// </summary>
    public class ConcreteVehicleFactory : VehicleFactory
    {
        public override IFactory GetVehicle(string Vehicle)
        {
            switch (Vehicle)
            {
                case "Scooter":
                    return new Scooter();
                case "Bike":
                    return new Bike();
                default:
                    throw new ApplicationException(string.Format("Vehicle '{0}' cannot be created", Vehicle));
            }
        }
    }


   public class Program
    {
        static void Main(string[] args)
        {
            VehicleFactory factory = new ConcreteVehicleFactory();

            IFactory scooter = factory.GetVehicle("Scooter");
            scooter.Drive(10);

            IFactory bike = factory.GetVehicle("Bike");
            bike.Drive(20);

            Console.ReadKey();
        }
    }
}

Factory Pattern Demo - Output




When to use it?
  1. Subclasses figure out what objects should be created.
  2. Parent class allows later instantiation to subclasses means the creation of object is done when it is required.
  3. The process of objects creation is required to centralize within the application.
  4. A class (creator) will not know what classes it will be required to create.


Some more usefull links are: link1link2
Continue Reading →

Topics

ADO .Net (2) Ajax (1) Angular Js (17) Angular2 (24) ASP .Net (14) Azure (1) Breeze.js (1) C# (49) CloudComputing (1) CMS (1) CSS (2) Design_Pattern (3) DI (3) Dotnet (21) Entity Framework (3) ExpressJS (4) Html (3) IIS (1) Javascript (6) Jquery (9) Lamda (3) Linq (11) Mongodb (1) MVC (48) NodeJS (7) RDLC (1) Report (1) Sql Server (29) SSIS (3) SSRS (2) UI (1) WCF (12) Web Api (10) Web Service (1) XMl (1)