Wednesday, August 5, 2009

ASP.NET MVC Extensibility-Part 2

In this post I am show how to Extended ASP.NET MVC Framework  Pipeline with ActionAttribute ,IActionFilter, IResultFilter . First we are going to create new attribute which is derived from ActionAttribute class.

what is Attribute?

Using Attributes we can decorate C# code in declarative fashion.  attributes can be applied types, methods, properties, and so forth. Once associated with a program entity, the attribute can be queried at run time using a technique called Reflection.

Attributes exist in two forms: attributes that are defined in the Common Language Runtime's base class library. For example  when we are defining a WCF Service Operations we decorate  WCF service methods with [OperationContract] attribute. 

Second form of attributes are  custom attributes that we create, to add extra information to your code. This information can later be retrieved programmatically.So now we are going to create a custom attribute class which is derived from ActionAttribute with the Interfaces IActionFilter, IResultFilter  this way i can automatically get the methods which i need to implement.

Here i am going to create attribute called RouteUser and Implementing the OnActionExecuting method this will execute before the Controller Action code executes.


Inside OnActionExecuting  method i am going to check if user is  Authenticated or not.  If user is not Authenticated then  i am going to throw an exception called access violation.  even you can log the details and Redirect the user to logon page. ok lets do that if user not authenticated we will redirect the user to Logon Page instead of throwing exception [i will put code for both] . 


Now we have finished creating the RouteUser attribute let’s use it in our  ASP.NET MVC controller action method and test it.


Now let us  invoke the Welcome action method  browsing the following url http://localhost:49584/Home/Welcome [please browse your local machine URL]  with out logging the result is the user Redirected to LogOn Page[http://localhost:49584/Account/LogOn] since the user did not Authenticated.


Note : we can use multiple action filters in the same action method  with order number specified  so that they execute in that order . 




No comments: