Chitika

June 27, 2012

ASP.NET MVC 4 WebAPI. Support Areas in HttpControllerSelector

This article was written for ASP.NET MVC 4 RC (Release Candidate). If you are still using Beta version of ASP.NET MVC 4 then you have to read the previous article.

HttpControllerFactory was deleted in ASP.NET MVC 4 RC. Actually, it was replaced by two interfaces: IHtttpControllerActivator and IHttpControllerSelector.

Unfortunately DefaultHttpControllerSelector still doesn't support Areas by default. To support it you have to write your HttpControllerSelector from scratch. To be honest, I will derive my selector from DefaultHttpControllerSelector.

In this post I will show you how you can do it.

AreaHttpControllerSelector

First of all, you have to derive your class from DefaultHttpControllerSelector class:

    public class AreaHttpControllerSelector : DefaultHttpControllerSelector
    {
        private readonly HttpConfiguration _configuration;

        public AreaHttpControllerSelector(HttpConfiguration configuration)
            : base(configuration)
        {
            _configuration = configuration;
        }
    }

In the constructor mentioned above I called the base constructor and stored the HttpConfiguration. We will use it a little bit later.

My code will use two constants:

        private const string ControllerSuffix = "Controller";
        private const string AreaRouteVariableName = "area";

You can understand why we need first one by name. The second one contains the name of the variable which we will use to specify area name in Routes collection.

Somewhere we have to store all of the API controllers.

        private Dictionary<string, Type> _apiControllerTypes;

        private Dictionary<string, Type> ApiControllerTypes
        {
            get { return _apiControllerTypes ?? (_apiControllerTypes = GetControllerTypes()); }
        }

        private static Dictionary<string, Type> GetControllerTypes()
        {
            var assemblies = AppDomain.CurrentDomain.GetAssemblies();

            var types = assemblies.SelectMany(a => a.GetTypes().Where(t => !t.IsAbstract && t.Name.EndsWith(ControllerSuffix) && typeof(IHttpController).IsAssignableFrom(t)))
                .ToDictionary(t => t.FullName, t => t);

            return types;
        }

Method GetControllerTypes takes all the API controllers types from all of your assemblies, and store it inside the dictionary, where the key is FullName of the type and value is the type itself.
Of course we will set this dictionary only once. And then just use it.

Now we are ready to implement one of the important method:

        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            return GetApiController(request) ?? base.SelectController(request);
        }

In that method I try to take the HttpControllerDescriptor from method GetApiController and if it return null then call the base method.

And additional methods:

        private static string GetAreaName(HttpRequestMessage request)
        {
            var data = request.GetRouteData();

            if (!data.Values.ContainsKey(AreaRouteVariableName))
            {
                return null;
            }

            return data.Values[AreaRouteVariableName].ToString().ToLower();
        }

        private Type GetControllerTypeByArea(string areaName, string controllerName)
        {
            var areaNameToFind = string.Format(".{0}.", areaName.ToLower());
            var controllerNameToFind = string.Format(".{0}{1}", controllerName, ControllerSuffix);

            return ApiControllerTypes.Where(t => t.Key.ToLower().Contains(areaNameToFind) && t.Key.EndsWith(controllerNameToFind, StringComparison.OrdinalIgnoreCase))
                    .Select(t => t.Value).FirstOrDefault();
        }

        private HttpControllerDescriptor GetApiController(HttpRequestMessage request)
        {
            var controllerName = base.GetControllerName(request);

            var areaName = GetAreaName(request);
            if (string.IsNullOrEmpty(areaName))
            {
                return null;
            }

            var type = GetControllerTypeByArea(areaName, controllerName);
            if (type == null)
            {
                return null;
            }

            return new HttpControllerDescriptor(_configuration, controllerName, type);
        }
Method GetAreaName just takes area name from HttpRequestMessage.

Method GetControllerTypeByArea are tries to find the controller in the ApiControllerTypes by full name of the controller where the full name contains area's name surrounded by "." (e.g. ".Admin.") and ends with controller name + controller suffix (e.g. UsersController).

And if a controller type found then method GetApiController will create and return back HttpControllerDescriptor.

So, my AreaHttpControllerSelector is ready to be registered in my application.

Registering AreaHttpControllerSelector

The next thing you have to do is to say to your application to use this controller selector instead of DefaultHttpControllerSelector. And fortunately it is really easy - just add one additional line to the end of Application_Start method in Glogal.asax file:
        protected void Application_Start()
        {
            // your default code
                    GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new AreaHttpControllerSelector(GlobalConfiguration.Configuration));
        }
That's all.

Using AreaHttpControllerSelector

If you did everything right, now you can forget about that "nightmare" code mentioned above. And just start to use it!

You have to add new HttpRoute to your AreaRegistration.cs file:

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.Routes.MapHttpRoute(
                name: "Admin_Api",
                routeTemplate: "api/admin/{controller}/{id}",
                defaults: new { area = "admin", id = RouteParameter.Optional }
            );

            // other mappings
        }

Or just use one global route in your Global.asax like:


            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{area}/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

That's all. Good luck, and have a nice day.

486 comments:

  1. This is great but it doesn't work if you are passing a complex type in the Get as per below:

    public IEnumerable Get([FromUri] ApiCriteria apiCriteria)

    When you pass values over in the query string that map to the complex type we get:

    No action was found on the controller 'Apis' that matches the request.

    but without the query string values it finds it.

    It works fine using the DefaultHttpControllerSelector and I haven't yet got to the bottom as to why.

    Shame as I could really do with using it to seperate my controllers into areas.

    ReplyDelete
    Replies
    1. Thanks for the comment.
      Yes, for now it is not so easy to fix it.

      But there is one workaround. You can create a special route and pass the parameters in a URL. So, you can split your complex type to simple types.

      For example, instead of:
      public IEnumerable Get(Person person) { ... }
      You can use:
      public IEnumerable Get(string firstName, string lastName) { ... }

      and map the route:
      routes.MapHttpRoute(
      name: "DefaultApiPerson",
      routeTemplate: "api/{area}/{controller}/{firstName}/{lastName}"
      );

      I hope it would help.

      Delete
    2. Hello Andrew and Anonymous.

      I found a solution that supports splitting webapi's across areas while maintaining querystring functionality. The trick is to store the area name in the route's DataTokens, rather than the default parameter list. The latter will confuse the routing engine and break querystring support. The updated version of Andrew's AreaHttpControllerSelector can be found in a blog post I just finished writing:

      ASP.NET MVC 4 RC: Getting WebApi and Areas to play nicely

      Thank you, Andrew, for writing this post. It helped me get on the right track! :)

      Delete
    3. Thank you Martin, for finish this topic.

      Delete
  2. Interestingly the namespaces default value extension got added to the MapHttpRoute in RC. This provides me with, (instead of using areas and this selector), another way of creating granular controllers grouped by namespaces but this suffers the same issue with not honouring the [FromUri] attribute.

    It is a pain because [FromUri] is the way to decorate and consume complex types in the Get methods for sure.

    ReplyDelete
  3. I decided to use your code as a base for a solution for versioning APIs:

    http://www.tuomistolari.net/blog/2012/8/23/webapi-convention-based-versioning-with-accept-headers.html

    ReplyDelete
  4. This is great ! I spent hours figuring out how to make Web Api and Areas work together and with your code, it just worked !

    Thanks a lot.

    ReplyDelete
  5. Your article was helpful, but I'm a little confused on what this gets you?

    I was able to add an area "Whatever" and add using System.Web.Http statement to the WhateverAreaRegistration class and map the route via context.Routes.MapHttpRoute in the RegisterArea method and the route get() just worked.

    I then thought maybe you were trying to make it such that you don't need to add the route in each area registration class, but I was able to accomplish that by removing what I did above and then doing the following in the Global.asax.cs Application_Start - RegisterRoutes method:

    routes.MapHttpRoute(
    name: "DefaultAreaApi",
    routeTemplate: "api/{area}/{controller}/{id}",
    defaults: new {id = RouteParameter.Optional}
    );

    routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );


    ReplyDelete
    Replies
    1. Could you try to create the API controllers with the same names in the different areas? ;)

      Delete
    2. I see. It wasn't clear to me that the problem this post aims to solve is this exception:

      Multiple types were found that match the controller named 'blah'. This can happen if the route that services this request ('services/{area}/{controller}/{id}') found multiple controllers defined with the same name but differing namespaces, which is not supported. The request for 'blah' has found the following matching controllers: MyProject.Web.Areas.Whatever.Controllers.BlahController MyProject.Web.Areas.Whatever2.Controllers.BlahController

      Makes sense now and works great. Thanks for the post and reply! ;)

      Delete
    3. Another question... It seems if I define the route in the global routes as api/{area}/{controller} it works. If I define the route as either {area}/api/{controller} or api/{area}/{controller} (flipping api and area) in each [Controller]AreaRegistration class it works either way. But if I flip it in the global route and try to define it as {area}/api/{controller} it doesn't work. Any thoughts on why this doesn't work (or are you able to do this)?

      Another caveat that I found is that you still can't have a controller at the root with the same name as a controller in an area. Is that correct?

      Thanks!

      Delete
    4. > Another caveat that I found is that you still can't have a controller at the root with the same name as a controller in an area. Is that correct?
      Yes, it's correct.

      > But if I flip it in the global route and try to define it as {area}/api/{controller} it doesn't work
      sorry, but I can't say exactly why it does not work now. I should check.

      Delete
  6. Thanks for you posting, but seems I can't find a controller by search ".{area}." with full controller class name.

    I'm using the self-host Web API, after loaded all controller types, the sample controller fullname with format SelfHost.ProductsController, even I already add area while config the MapHttpRoute.

    Am I missing any steps, or this way don't support self host Web API?

    ReplyDelete
  7. Ohh! Saved my life! thank you for an amazng fix.

    ReplyDelete
  8. Wow! thanks! this saved me a lot of agony. But I still have a problem. The automatic help generator generates other items that are not there because of the routing. I have the routes
    api/admin/{controller}/{id}
    api/{area}/{controller}/{id}
    I have controllers MyProject.Web.Admin.AccountsController and MyProject.Web.NewsController
    now in the documentation I get, options like
    GET api/admin/accounts
    GET api/admin/news
    GET api/accounts
    GET api/news
    Obviously that throws an exception. Any idea of how to solve that

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. You must take part in a contest for top-of-the-line blogs on the web. I will suggest this web site!
      data science training

      dataguard training

      datastage training

      dell boomi training

      Delete
  10. This is really nice. Thanks for sharing this article
    Dot net training Chennai

    ReplyDelete
  11. Thanks for sharing this useful information..Its really very informative.

    Dot Net Course Chennai

    ReplyDelete
  12. Thanks for sharing informative post about Microsoft Visual Studio. This platform is used to create web application and services. Being widely used software framework, this domain offer huge career opportunity for trained professionals. We at, DOT NET Training offer hands on training in this evergreen technology.

    ReplyDelete
  13. I get a lot of great information from this blog. Thank you for your sharing this informative blog. I have bookmarked this page for my future reference. Recently I did oracle certification course at a leading academy. If you are looking for best Oracle Training in Chennai visit FITA IT training and placement academy which offer PL SQL Training in Chennai.

    ReplyDelete
  14. Thanks for sharing these niche piece of coding to our knowledge. Here, I had a solution for my inconclusive problems & it’s really helps me a lot keep updates…
    DOT NET Training in Chennai | Fita Chennai Reviews

    ReplyDelete


  15. Thanks for sharing this informative blog. FITA provides Salesforce Course in Chennai with years of experienced professionals and fully hands-on classes. Salesforce is a cloud based CRM software. Today's most of the IT industry use this software for customer relationship management. To know more details about salesforce reach FITA Academy. Rated as No.1 Salesforce Training Institutes in Chennai.

    ReplyDelete
  16. SAP Training

    Thanks for sharing this valuable information.and I gathered some information from this blog. I did SAP Course in Chennai, at FITA Academy which offer best SAP Training in Chennai with years of experienced professionals.

    SAP Training Institute in Chennai

    ReplyDelete
  17. Its really awesome blog..If anyone wants to get Software Testing Training in Chennai visit FITA IT academy located at Chennai. Rated as No.1 Software Testing Training Institutes in Chennai

    Regards.....

    Testing Training in Chennai | QTP Training in Chennai

    ReplyDelete
  18. Your posts is really helpful for me.Thanks for your wonderful post. I am very happy to read your post.

    Mysql Training in chennai | Mysql Training chennai

    ReplyDelete
  19. There are lots of information about latest technology and how to get trained in them, like Big Data Training in Chennai have spread around the web, but this is a unique one according to me. The strategy you have updated here will make me to get trained in future technologies(Big Data Training). By the way you are running a great blog. Thanks for sharing this. cloud computing training in chennai

    ReplyDelete
  20. Wow! It was the best article , actually you have posted something new compared to others, because I read many articles related to this topic but I only get impressed with your post only, keep posting.
    Regards,
    Informatica training in chennai|Best Informatica Training In Chennai|Informatica course in Chennai

    ReplyDelete
  21. This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic..
    Informatica Training in chennai | QTP Training in Chennai



    ReplyDelete
  22. This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic..
    Informatica Training in chennai | QTP Training in Chennai



    ReplyDelete
  23. It’s too informative blog and I am getting conglomerations of info’s. Thanks for sharing; I would like to see your updates regularly so keep blogging. If anyone looking car just get here
    Regards,
    sas training in Chennai|sas course in Chennai|sas institutes in Chennai

    ReplyDelete
  24. Pretty Post! It is really interesting to read from the beginning & I would like to share your blog to my circles for getting awesome knowledge, keep your blog as updated.
    Regards,
    Oracle Training in Chennai|Oracle DBA Training in Chennai|Oracle Training Institutes in Chennai

    ReplyDelete
  25. Thanks for sharing this informative blog. If you are interested in taking .net in professional carrier visit this website.Dot Net Training in Chennai

    ReplyDelete
  26. I am not getting this much information in any other blogs, Thanks admin for giving detail stuffs of MI am not getting this much information about Cloud computing in any other blogs, Thanks admin for giving detail stuffs of MVC.
    Regards,
    Cloud computing course in Chennai|cloud training in chennai.

    ReplyDelete
  27. Phone calls can be composed so that the calling party calls alternate members and adds them to the call; be that as it may, members are generally ready to call into the telephone call themselves by dialing a phone number that interfaces with a "meeting extension" (a specific sort of hardware that connections phone lines).Conference Calling Via Phone

    ReplyDelete
  28. Tremendous information, i had come to recognise about your blog from my buddy nandu , hyderaba.
    I have read atleast 7 posts of yours through now, and let me inform you, your website gives the
    Great and the maximum interesting records. that is just the form of statistics that i had
    Been searching out, i'm already your rss reader now and i'd frequently be careful for the brand new posts.
    from
    oracle cloud fusion financials

    ReplyDelete
  29. I get a lot of great information from this blog.
    Thank you for your sharing this informative blog.
    I have bookmarked this page for my future reference.
    Recently I did oracle certification course at a leading academy.
    If you are looking for best Oracle Training in Chennai visit http://call360.in/Chennai/educational_institutes_greens_technology_adyar_adyar.php training
    and placement academy which offer PL SQL Training in Chennai.

    ReplyDelete
  30. Fastest local business directory in India CALL360

    ReplyDelete
  31. https://shilohjanee.blogspot.in/2015/08/working-women-hostel-in-chennai_17.html?showComment=1492595069170#c8266620196316480802

    ReplyDelete
  32. This is a great article, I have been always to read something with specific tips! I will have to work on the time for scheduling my learning.
    Dot Net Training in Chennai

    ReplyDelete
  33. Very good idea you've shared here, from here I can be a very valuable new experience.
    Java Training in Chennai
    Java Training Institute in Chennai

    ReplyDelete
  34. That was an educative piece of article on Support Areas in HttpControllerSelector and I have understood a lot of facts and principles in addition to the shared programs. Thanks for sharing with us such an informative and educative post. I will be recommending it to our professional editors who offer editing services to individuals who Need Citation Auditing Help.

    ReplyDelete
  35. Very good informative and explanation with screenshot is really wonderful.

    Dot Net Training in chennai

    ReplyDelete
  36. Excellent blog,great explanation using screenshot...
    Dot Net Training in chennai

    ReplyDelete

  37. Informative blog and it was up to the point describing the information very effectively. Thanks to blog author for wonderful and informative post.

    IOS Application Developers Chennai | IOS Application Developers in Chennai | IOS App Developers in
    Chennai

    ReplyDelete
  38. Thank you a lot for providing individuals with a very spectacular possibility to read critical reviews from this site.

    Best Java Training Institute Chennai


    Amazon Web Services Training in Chennai

    ReplyDelete
  39. I simply wanted to write down a quick word to say thanks to you for those wonderful tips and hints you are showing on this site.
    Best selenium training Institute in chennai

    ReplyDelete
  40. Ciitnoida provides Core and java training institute in

    noida
    . We have a team of experienced Java professionals who help our students learn Java with the help of Live Base Projects. The object-

    oriented, java training in noida , class-based build

    of Java has made it one of most popular programming languages and the demand of professionals with certification in Advance Java training is at an

    all-time high not just in India but foreign countries too.

    By helping our students understand the fundamentals and Advance concepts of Java, we prepare them for a successful programming career. With over 13

    years of sound experience, we have successfully trained hundreds of students in Noida and have been able to turn ourselves into an institute for best

    Java training in Noida.

    java training institute in noida
    java training in noida
    best java training institute in noida
    java coaching in noida
    java institute in noida

    ReplyDelete
  41. This comment has been removed by the author.

    ReplyDelete
  42. sap fico training in noida

    CIITN is the Best summer sap fico training in noida
    for B.Tech/ M.TECH /BE/ B.SC/ M.sc / BCA/ MCA/ CS/CSE/IT/ Information Technology/ Engineering Student. Summer Training in Noida Offer by CIITN for all engineering domains. It has a dedicated placement cell which provides 100% placement assistance to students. The benefits that a student gets out of summer training are innumerable. CIITN, Best Summer training Center for B.Tech/CS/CSE/IT/ BCA/MCA/ B.E /M.tech / B.sc/ M.sc/ Engineering Student has already accomplished itself successfully in the field of Training and Development after setting milestones and bringing smiles to the faces of more than 1 Lakh students. CIITN was incorporated in the year 2002 and over the years CIITN has grown remarkably into the greatest training giant of Northern India. CIITN InfoTech is the only organization that is operating in three vertical domains- Training, Software & Embedded Development and consulting. Quality is the first and foremost indicator for CIITN. CIITN emphasizes on Quality and understands the importance of imparting Quality Technical Education in creating competitive advantage. CIITN, Top Summer Course Institute for BE / Computer Science/CSE/IT/ Information Technology/ BCA/ MCA/ B.sc/ M.sc/ B.Tech/ M.Tech/ Engineering Studentboasts to have its trainers and experts from some of the best industries.
    Sap Training in Noida

    ReplyDelete
  43. Great Post. Keep sharing such kind of noteworthy information.

    IoT Training in Chennai | IoT Courses in Chennai

    ReplyDelete
  44. This was an nice and amazing and the given contents were very useful and the precision has given here is good.
    Data Science Training in Chennai

    ReplyDelete
  45. Amazon Web Services (AWS) certification training helps you to gain real time hands on experience on AWS.Aws Training in Bangalore.

    ReplyDelete
  46. good information provided in the blog thanks for sharing for more visit
    Dot Net MVC Training in Texas

    ReplyDelete
    Replies
    1. Hi there I am so thrilled I found your website, I really found you by mistake, while I was browsing on Yahoo for something else, Anyhow I am here now and would just like to say thanks a lot for a tremendous post and an all-round exciting blog (I also love the theme/design), I don’t have time to go through it all at the minute but I have saved it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the awesome job.

      Aws Training in Chennai

      Delete
  47. Great blog, Its really give such wonderful information, that was very useful for me. Thanks for sharing with us.

    Dot Net Training in Chennai

    ReplyDelete
  48. Howdy, would you mind letting me know which web host you’re utilizing? I’ve loaded your blog in 3 completely different web browsers, and I must say this blog loads a lot quicker than most. Can you suggest a good internet hosting provider at a reasonable price?
    Hadoop Training in Bangalore
    Hadoop Training in Chennai

    ReplyDelete
  49. Thank you for taking the time and sharing this information with us. It was indeed very helpful and insightful while being straight forward and to the point.
    python training in omr

    python training in annanagar | python training in chennai

    python training in marathahalli | python training in btm layout

    python training in rajaji nagar | python training in jayanagar

    ReplyDelete
  50. After seeing your article I want to say that the presentation is very good and also a well-written article with some very good information which is very useful for the readers....thanks for sharing it and do share more posts like this.

    java training in omr

    java training in annanagar | java training in chennai

    java training in marathahalli | java training in btm layout

    java training in rajaji nagar | java training in jayanagar

    ReplyDelete
  51. This comment has been removed by the author.

    ReplyDelete
  52. myTectra Amazon Web Services (AWS) certification training helps you to gain real time hands on experience on AWS. myTectra offers AWS training in Bangalore using classroom and AWS Online Training globally. AWS Training at myTectra delivered by the experienced professional who has atleast 4 years of relavent AWS experince and overall 8-15 years of IT experience. myTectra Offers AWS Training since 2013 and retained the positions of Top AWS Training Company in Bangalore and India.
    aws training in bangalore

    ReplyDelete
  53. Harvard Business Review named data scientist the "sexiest job of the 21st century".This Data Science course will cover the whole data life cycle ranging from Data Acquisition and Data Storage using R-Hadoop concepts, Applying modelling through R programming using Machine learning algorithms and illustrate impeccable Data Visualization by leveraging on 'R' capabilities.With companies across industries striving to bring their research and analysis (R&A) departments up to speed, the demand for qualified data scientists is rising.

    data science training in bangalore

    ReplyDelete
  54. I have picked cheery a lot of useful clothes outdated of this amazing blog. I’d love to return greater than and over again. Thanks! 
    python training in rajajinagar
    Python training in btm
    Python training in usa

    ReplyDelete
  55. Thanks for such a great article here. I was searching for something like this for quite a long time and at last I’ve found it on your blog. It was definitely interesting for me to read  about their market situation nowadays.
    java training in chennai | java training in bangalore

    java online training | java training in pune

    ReplyDelete
  56. Gaining Python certifications will validate your skills and advance your career.
    python certufication

    ReplyDelete
  57. I found this informative and interesting blog so i think so its very useful and knowledge able.I would like to thank you for the efforts you have made in writing this article.
    python training in velachery
    python training institute in chennai

    ReplyDelete
  58. Thank you for benefiting from time to focus on this kind of, I feel firmly about it and also really like comprehending far more with this particular subject matter. In case doable, when you get know-how, is it possible to thoughts modernizing your site together with far more details? It’s extremely useful to me.
    Data Science course in rajaji nagar | Data Science with Python course in chenni
    Data Science course in electronic city | Data Science course in USA
    Data science course in pune | Data science course in kalyan nagar


    ReplyDelete
  59. Superb. I really enjoyed very much with this article here. Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this excellent article.thank you for sharing such a great blog with us. expecting for your.
    Best Java Training in Chennai
    Best Java Training in Bangalore
    Java Courses in Chennai Mogappair
    Java Training in Ashok Nagar
    Java Training in Kelambakkam

    ReplyDelete
  60. I really loved reading your blog. It was very well authored and easy to undertand. Unlike additional blogs I have read which are really not tht good. I also found your posts very interesting. In fact after reading. I had to go show it to my friend and he ejoyed it as well!
    dot net training in chennai

    ReplyDelete
  61. Good job! Fruitful article. I like this very much. It is very useful for my research. It shows your interest in this topic very well. I hope you will post some more information about the software. Please keep sharing!!
    AWS Course in Chennai
    Aws Certification in Chennai
    Best AWS Training in Bangalore
    AWS Training in Nolambur
    AWS Training Institutes in T nagar

    ReplyDelete
  62. Hmm, it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well as an aspiring blog writer, but I’m still new to the whole thing. Do you have any recommendations for newbie blog writers? I’d appreciate it.
    Best Selenium Training in Chennai | Selenium Training Institute in Chennai | Besant Technologies

    Selenium Training in Bangalore | Best Selenium Training in Bangalore

    ReplyDelete
  63. I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own BlogEngine blog now. Really the blogging is spreading its wings rapidly. Your write up is a fine example of it.
    python training in pune | python training institute in chennai | python training in Bangalore

    ReplyDelete
  64. I am really enjoying reading your well-written articles. It looks like you spend a lot of effort and time on your blog. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work.
    data science course in bangalore
    Deep Learning course in Marathahalli Bangalore
    NLP course in Marathahalli Bangalore
    AWS course in Marathahalli Bangalore

    ReplyDelete
  65. myTectra offers DevOps Training in Bangalore,Chennai, Pune using Class Room. myTectra offers Live Online DevOps Training Globally

    ReplyDelete
  66. DevOps is currently a popular model currently organizations all over the world moving towards to it. Your post gave a clear idea about knowing the DevOps model and its importance.

    Good to learn about DevOps at this time.

    devops training in chennai | devops training in chennai with placement | devops training in chennai omr | devops training in velachery | devops training in chennai tambaram | devops institutes in chennai

    ReplyDelete
  67. Great article on Blueprism .. I love to read your article on Blueprism because your way of representation and writing style makes it intresting. The speciality of this blog on Blueprism is that the reader never gets bored because its same Intresting from 1 line to last line. Really appericable post on Blueprism.
    Thanks and Regards,
    Uipath training in chennai

    ReplyDelete
  68. I think this is the best article today about the future technology. Thanks for taking your own time to discuss this topic, I feel happy about that curiosity has increased to learn more about this topic. Keep sharing your information regularly for my future reference.
    Selenium Training in Chennai
    selenium testing training in chennai
    iOS Training in Chennai
    testing training
    testing Courses in Chennai

    ReplyDelete
  69. I like it and help me to development very well. Thank you for this brief explanation and very nice information. Well, got a good knowledge.
    safety courses in chennai

    ReplyDelete

  70. Amazon has a simple web services interface that you can use to store and retrieve any amount of data, at any time, from anywhere on the web. Amazon Web Services (AWS) is a secure cloud services platform, offering compute power, database storage, content delivery and other functionality to help businesses scale and grow.For more information visit.
    aws online training
    aws training in hyderabad
    aws online training in hyderabad

    ReplyDelete
  71. Thanks for such a great article here. I was searching for something like this for quite a long time and at last I’ve found it on your blog. It was definitely interesting for me to read about their market situation nowadays. Well written article.Thank You Sharing with Us Please keep Sharing For More info on asp.net. please follow our android article.android java interview questions and answers for experienced | android code structure best practices

    ReplyDelete
  72. Thank you so much for a well written, easy to understand article on this. It can get really confusing when trying to explain it – but you did a great job. Thank you!

    python interview questions and answers | python tutorialspython course institute in electronic city

    ReplyDelete
  73. Thanks for such a nice article on Blueprism.Amazing information of Blueprism you have . Keep sharing and updating this wonderful blog on Blueprism
    Thanks and regards,
    blue prism training in chennai
    blue prism training institute in chennai
    Blueprism certification in chennai

    ReplyDelete
  74. Nice Article,Great experience for me by reading this info.
    thanks for sharing the information with us.keep updating your ideas.
    AWS Certification Training in Bangalore
    AWS Training in Mogappair
    AWS Training in Nungambakkam

    ReplyDelete
  75. JavaScript is the most widely deployed language in the world
    Javascript Interview Questions

    ReplyDelete
  76. Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work.
    R Programming training in Chennai | R Programming Training in Chennai with placement | R Programming Interview Questions and Answers | Trending Software Technologies in 2018

    ReplyDelete
  77. Your blog is so inspiring for the young generations.thanks for sharing your information with us and please update more new ideas.
    Android Training in Navalur
    Android Training in Saidapet
    Android Training in Nolambur
    android application development training in bangalore

    ReplyDelete
  78. Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
    angularjs Training in bangalore

    angularjs Training in bangalore

    angularjs online Training

    angularjs Training in marathahalli

    angularjs interview questions and answers

    ReplyDelete
  79. It's really a nice experience to read your post. Thank you for sharing this useful information. If you are looking for more about Roles and reponsibilities of hadoop developer | hadoop developer skills Set | hadoop training course fees in chennai | Hadoop Training in Chennai Omr

    ReplyDelete
  80. Nice article. I liked very much. All the informations given by you are really helpful for my research. keep on posting your views.
    Android Training in Chennai
    Android training
    Android training near me
    AWS Training in Chennai
    AWS Training
    AWS Course in Chennai

    ReplyDelete
  81. Very nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
    Machine learning training in chennai | machine learning course fees in chennai | machine learning with python course in Chennai

    ReplyDelete
  82. It's really a nice experience to read your post. Thank you for sharing this useful information. If you are looking for more about Trending Software Technologies in 2018 | Hadoop Training in Chennai | big data Hadoop training and certification in Chennai |

    ReplyDelete
  83. Outstanding blog thanks for sharing such wonderful blog with us ,after long time came across such knowlegeble blog. keep sharing such informative blog with us. Machine learning training in chennai
    python machine learning training in chennai
    best training insitute for machine learning

    ReplyDelete
  84. Amazing Post . Thanks for sharing. Your style of writing is very unique. Pls keep on updating.

    Guest posting sites
    Education

    ReplyDelete
  85. Beberapa tips cara menggugurkan hamil untuk anda dengan menggunakan obat penggugur kandungan cytotec , terbukti dengan cepat untuk cara mencegah kehamilan . Maka dari itu pilihlah obat aborsi sangat ampuh . Jika anda telah haid obat telat datang bulan juga manjur , kami jual obat aborsi ini secara online . http://readthedocs.org/projects/cara-menggugurkan-hamil/

    ReplyDelete
  86. I really thank you for your innovative post.I have never read a creative ideas like your posts.
    here after i will follow your posts which is very much help for my career.
    Selenium Training in Guindy
    Selenium Training in Saidapet
    Selenium Training in Navalur
    Selenium Training in Karapakkam

    ReplyDelete
  87. This comment has been removed by the author.

    ReplyDelete
  88. Nice blog..! I really loved reading through this article. Thanks for sharing such a amazing post with us and
    keep blogging...

    bluecross
    Article submission sites

    ReplyDelete
  89. I was curious if you ever considered changing the layout of your site? It’s very well written; I love what you’ve got to say.
    fire and safety course in chennai

    ReplyDelete
  90. Thank you so much for a well written, easy to understand article on this. It can get really confusing when trying to explain it – but you did a great job. Thank you!
    Java training in Chennai

    Java training in Bangalore

    ReplyDelete
  91. I would like to share with my colleagues so that they also get the opportunity to read such an informative blog.
    Devops Training
    Dotnet Training

    ReplyDelete

  92. Learned a lot from your blog. Good creation and hats off to the creativity of your mind. Share more like this.
    Loadrunner Training in Chennai
    French Classes in Chennai
    Android Training in Chennai

    ReplyDelete
  93. Hello! Someone in my Facebook group shared this website with us, so I came to give it a look. I’m enjoying the information. I’m bookmarking and will be tweeting this to my followers! Wonderful blog and amazing design and style.
    safety course in chennai

    ReplyDelete
  94. it is very much useful for me to understand many concepts and helped me a lot.
    sql-server-dba training
    sql-and-plsql training

    ReplyDelete
  95. it is really explainable very well and i got more information from your blog.
    Appium Training
    Application Packagining Training

    ReplyDelete
  96. Wonderful work! This is the type of info that are supposed to be shared around the internet. Disgrace on the search engines for no longer positioning this publish higher! Come on over and consult with my site .
    sap grc training

    sap gts training


    ReplyDelete
  97. Informative post, thanks for taking time to share this page.
    https://www.kitsonlinetrainings.com/ibm-message-broker-online-training.html
    https://www.kitsonlinetrainings.com/ibm-message-queue-online-training.html
    https://www.kitsonlinetrainings.com/informatica-data-quality-online-training.html
    https://www.kitsonlinetrainings.com/informatica-mdm-online-training.html
    https://www.kitsonlinetrainings.com/informatica-online-training.html

    ReplyDelete
  98. Very Clear Explanation. Thank you to share this
    Regards,
    Data Science Certification Course

    ReplyDelete
  99. Are you trying to move in or out of Jind? or near rohtak Find the most famous, reputed and the very best of all Packers and Movers by simply calling or talking to Airavat Movers and Packers

    Packers And Movers in Jind

    Packers And Movers in Rohtak

    Movers And Packers in Rohtak


    ReplyDelete
  100. Appreciating the persistence, you put into your blog and detailed information you provide.
    iosh safety course in chennai

    ReplyDelete
  101. Very nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.

    top institutes for machine learning in chennai
    python machine learning training in chennai
    machine learning classroom training in chennai
    artificial intelligence and machine learning course in chennai

    ReplyDelete
  102. This comment has been removed by the author.

    ReplyDelete