Exercise 3: Injecting Action Filters

In a previous Lab about Custom Action Filters you have been working with filters customization and injection. In this exercise,you will learn how to inject filters with Dependency Injection by using Unity Application Block containers. To do that, you will add to the Music Store Solution a custom action filter that will trace site activity.

Task 1 – Including the Tracking Filter in the Solution

In this task, you will include in the Music Store a custom action filter for event tracing. As filters were treated in a previous Lab “Custom Action Filters”, you will include the filter class from the Assets folder and then create a Filter Provider for Unity:

  1. Open the begin solution at /Source/Ex03 – Injecting Filters/Begin/MvcMusicStore.sln.
  2. Create the folder /Filters at project root.
  3. Add the custom action filter TraceActionFilter.[cs|vb] to the project in the folder /Filters that you can find it at/Sources/Assets/TraceActionFilter.[cs|vb].

    C# - TraceActionFilter.cs

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMusicStore.Filters { public class TraceActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Trace.Write("OnActionExecuted"); filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName); filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName); } public void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Trace.Write("OnActionExecuting"); filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName); filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName); } } }

    Visual Basic - TraceActionFilter.vb

    Public Class TraceActionFilter Implements IActionFilter Public Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext) Implements IActionFilter.OnActionExecuted filterContext.HttpContext.Trace.Write("OnActionExecuted") filterContext.HttpContext.Trace.Write("Action " & filterContext.ActionDescriptor.ActionName) filterContext.HttpContext.Trace.Write("Controller " & filterContext.ActionDescriptor.ControllerDescriptor.ControllerName) End Sub Public Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext) Implements IActionFilter.OnActionExecuting filterContext.HttpContext.Trace.Write("OnActionExecuting") filterContext.HttpContext.Trace.Write("Action " & filterContext.ActionDescriptor.ActionName) filterContext.HttpContext.Trace.Write("Controller " & filterContext.ActionDescriptor.ControllerDescriptor.ControllerName) End Sub End Class

    Note:
    This custom action filter performs ASP.NET tracing.

    You can check “Global and Dynamic Action Filters” Lab for more reference.

  4. Add the empty class FilterProvider.[cs|vb] to the project in the folder /Filters.
  5. Include System.Web.Mvc and Microsoft.Practices.Unity namespaces in FilterProvider.[cs|vb].

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – FilterProvider namespace – Csharp)

    C#

    using System;
    FakePre-f916ceb4741649d09dc31e9eac74671c-65d9236df211428898e284823ba9cf39FakePre-c603ebc1a063417585e278c2acce55c2-a0432f4095644eb2a59b582b0fbe7c75FakePre-356c470212264fb78964651d2d96997a-39b67b7e24be48cbab328f5f14048af8using System.Web.Mvc; using Microsoft.Practices.Unity;FakePre-6d273a08d334486a92152404bf8d56be-da28d1f6bafc422c9f60f85b719eb2caFakePre-ac42b5a7ff5c4a04b788a64e06b9ff82-68235d9af66f49a7a95dd9dfd0a24299FakePre-30dc6b436b134a5ca279da4f96c1de28-1fdadec39e7e417586db588b3707ec6dFakePre-4b95ba23bda14c6ca92c1c7d3ceb0975-2201f8c6b1544ad792a6243acbf59560FakePre-c83674fcfafb482ebb32de24ea0a2fd1-f9d3d754bce640c7a6877eac23a6c083FakePre-1eefec8330f5465cbaa482e9246f9c75-61735a274858468b8e045857381ad979FakePre-8afd7719c2274bd1bb83aeae1b8ef793-a8a55ff8838141a9b4e878b116df96d7

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – FilterProvider namespace – VB)

    Visual Basic

    Imports System.Web.Mvc Imports Microsoft.Practices.Unity
    FakePre-28d120c3240245d6bff1fee59e6e373e-8e3908ec243846bc9cbb5685ed5662b9FakePre-4327bde0348f4a69bcbbe48149356ea3-bb544a859dc74f8dae9f789f478e1b30FakePre-3e3f9141d6be4757b447e9c5dd90b786-9cb761b5b1214a23ab5ae42f291ae736
    

Make the class inherit from IFilterProvider Interface.

C#

using System;
FakePre-1c9add06e86a4f1481df708146f9a789-5076a77d68bb44a09162f6dace6a4e4fFakePre-3ade05e8890849d08d12652b14529287-35ccb301b4d24f929740d279952743ccFakePre-347c12a7b97c4034b9d1f0a619f51fde-9b30101f224b4726a7f9355e7785e85dFakePre-9c53ed0831304dd98aae791bc7a57017-e6f6c7b29d4249778107ef06d99bae53FakePre-8bf77a82d3e84d7699e76966f5024ae9-3ea5331f18c6426ca8035992f687094bFakePre-d88fd1ff75274138a6f75796a65325b5-b7a649adc1714ce186c221ef893f66f5FakePre-113cb06c30934ecb905041805854ebe8-0a9b56c2a8424098a0aadb22a100aaf8FakePre-cfcdcf751bc9424f83543a79e306ec55-d02a8f4a1686457c99b11ed5f0a7db99FakePre-36be244c15714b4a9fa3a5395c3dc0fe-6b489a3f30e340678d7ae0c3ba9e0ef3FakePre-91df63992e8d4b14a26ad3294d48db28-7d2121cf2f0b4acd92fb872ab2dc031dFakePre-258f5e72318745c4942a649cc8abf01e-5fec22300b2044c3a3c10e08201b0f78FakePre-1ade8d9e93ac46fa8101311b3d3e8aeb-e2d7c951c5f048ecace0529afef6f569

Visual Basic

Imports System.Web.Mvc
FakePre-984662c9882b4c0cafdaf3ed27777a1b-cb10c8f3a430439fb98f73eca98c1353FakePre-b58b9994f7d849f0a971b9acf45a7a77-331040b0c080464ea427e485df8cadcbFakePre-aa76429d1bcf486e8e3c9ef98094c75b-0615af5a05bd4e449df4b149a6f9e4e6FakePre-e5dce50b1a414b29bfddc48c73fcef3b-d52f86cda76c43ddbc5e08fa60c0a48fFakePre-e3f59491dbfb4bbb8e2c8db5745e2f68-07c29226e02f42beb32a245cbdd01c56FakePre-627047291a554bcebd558a3c7f4f6aca-2508d670347e4a6fbf9b445f9f9c1d9d

  1. Add a IUnityContainer property in FilterProvider class, and then create a class constructor to set the container:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – IUnityContainer – Csharp)

    C#

    using System;
    FakePre-5d28a77f1e2c43008da4f14b238cd73a-e7d37a80110541ba8ac7f9c13ffb79b2FakePre-46d9587837054e96ba597f993e83d0b8-47a005b956f94eb0b41e78e4c4d8cf32FakePre-b05aab6fdf324679988c7e13ce1f6bba-454f969ae8864d1baa22f636154c57c5FakePre-c639dd5d84a0460aa8b852605b80479c-f2fafc2985f34829bcf4a480ada2b78aFakePre-f75a8336fcf94ef3889e68f34efcbd03-811a1e7e443f4404a3d457c5fb830789FakePre-575bab3549a047438395b3aa3d7cd751-adf621b9589b4a73ab7df36aabe8092fFakePre-d510131ab1444a5da33a8b6caedcc11d-4ac28548d8724b10926ccf9641399d33FakePre-69659feb57904a8a9cae26f98a47db42-623a9bb2bed3402e98991ce33b51d49dFakePre-c399b6213af14a7ab18b673e8aba598e-155f00b04422478ca31ee49f9effa110FakePre-5b532316d3cb4de1b940699630da8887-c729ee4ebe9f488285e6c291ad24e4be IUnityContainer container; public FilterProvider(IUnityContainer container) { this.container = container; }FakePre-bbea8138cf67454787f563a6b18a2ee6-457c2f95c8224e5193721c110c3e970aFakePre-e23187dac3b8467bbcb4a38140c8159c-54cef7f2368f4282822dfde5c6b187daFakePre-8c3d36bea7124ba68cf4f3cb93899e36-b1cd1f1d1b3e4b6a90091874fcc9e68cFakePre-e435e4be606f4ec19e09b2112aaf3267-29f8e36184d7436babccc5a45217d7e9

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – IUnityContainer – VB)

    Visual Basic

    Imports System.Web.Mvc
    FakePre-6ba332a688304a1ab0119afedf2757ff-222b888c778b4696a912ef5236088036FakePre-fb306b27bb7f43b19d6283ae3dc27187-7b766da1e4154efc9eac3b0f456aa82bFakePre-6e331b6e0e904fbdb3e89ac44a98b70f-9f18a1b4800b4b2f845df1ff756c9e6dFakePre-39af9c80578f4dcb8852053e9c41f280-938ca7f84d7c40c582eb700914a9cdfdFakePre-67333be2de87494a887e8c9f0d4a0c6d-4afe0f01bc2e4a5a8dfa58de8b71899b Private container As IUnityContainer Public Sub New(ByVal container As IUnityContainer) Me.container = container End SubFakePre-a6359b32eaca4602a4187a4267e7a743-b4a3864648894fa196be8261b4ee4a45FakePre-d0eba2267bdc4c4da58d40a10df678ac-8f33455675b747f9921a013f6d5ccb9dFakePre-6893e2f2baac4c55b9061c8b6f41d3d1-887f37caeaa7482c98a56f06e78abb34

    Note:
    The filter provider class constructor is not creating a new object inside. The container is passed as a parameter, and the dependency is solved by Unity.

  2. Implement in FilterProvider class the method GetFilters from IFilterProvider interface:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – GetFilters – Csharp)

    C#

    using System;
    FakePre-ef7dbd9006384e5bac8093945ef66521-11b07f4141534c0897f40f119255d691FakePre-64c673ae25224babb76cb2369fb42d07-6731578d71f849eabee0ea65df5f90e8FakePre-aba6456a893249ddbb7e06058f5092b2-186268e4bc0d47328998741fb763bce8FakePre-15a30342bce54d0dbe41baf51e91459e-fc14b2e245da453d83f8cb8123b6d7ddFakePre-8ce93e66394445818ad00ac26aa64665-b3db7b3ee0994b7097eb863f6e750549FakePre-ddc28c939e2141a2b82ae49ee9b70185-559a26ed92c94d079204d909a62b0ef0FakePre-5853664f0a7243a187e8c57a5bd2ca7b-e66e4b6341c84f11b40d7ef894ef6c49FakePre-0cd7489c50bb4fe98680a52de874a2ba-f7dbd22fbf2546768ddc83fafe0d39bfFakePre-b62e00abb34041709cfe535a031477e4-92ccfa1602c44a19bed14c118ef6743bFakePre-de501cf0ac3943848252aa953f95bfe4-9c4ae4b922d14c20a12a9f01a9dcb341FakePre-a52901fd114943708cdd93035d218818-9a1693fb025743e0a9a93218b56f611cFakePre-916d4043da824d1fb8b3efbd37eb0ac9-f1233daa03214280a3b00060b1ece247FakePre-127957f5af7741a9adac0b9be5b9939a-02aa679ea357433fac9247b650cfb3cdFakePre-a6edb70cacba4e17844cebf6c137ab2a-9a9cc38ee15746d599fddff8af65c960FakePre-4168f905dba64b6ba745e421b5db173c-4a3fc88b17754471a5cb02a10343d26cFakePre-948c1453ce7f4b7ea970f069c55a8b90-b7bd993eae92461e8f670326f7f05b86FakePre-1604914d59b743d999c535ab23f95615-b48888ae6bb6489ea07cb32f9a233441 public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { foreach (IActionFilter actionFilter in container.ResolveAll<IActionFilter>()) yield return new Filter(actionFilter, FilterScope.First, null); }FakePre-e826fb7dfeeb4efb98a02706a5fe619b-15e1cd5ea449463fb5883fa34df8092cFakePre-a0fa422430d04c40a9d9b3d1fa00cd37-b7d8f151c33d42cf8f632eb4ef602d99

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – GetFilters – VB)

    Visual Basic

    Imports System.Web.Mvc
    FakePre-a58f0392d5f2450e88ea8365d013c207-c13568d53b18444aa9bf33eef810177cFakePre-a0fddd8b587b47bdb7a1dc8208c055c0-884048b94d9d4117919bbe0206c968a2FakePre-b5102d1bd92f4ec49bd959b2ea5e110a-a2a0d6a735cb4b80baa843e0b0b2fd3bFakePre-bd11a3ea8b47448d91557c55328a15fa-5938cce4db914affbda7d5f2dbfddfb2FakePre-608779214f30470b99ac0ef3c58c5c0e-5e2b6e76e00741f19cac370a4d230749FakePre-948c52fab4994feabfeafab0ee6bcaa4-358ae48e4f484f54a34a640620c016aeFakePre-c86cea6b0d9140679e12c94253d58214-a95e88dc9f4e4a41b75237f57f98d0a5FakePre-5f46dd46e3524edc988062b7daefcca0-fae072e97c3e41108a77139e070a6b82FakePre-580442aed1334438af4efe519b4da93d-aaa187dfdb174217a3e359560b128b3fFakePre-b08d5f337c214854aad8a731c97aaf72-d01436f531314868964d154770d53216FakePre-25781360083b4bfb837f5b3c27858db3-a921c60304d04d91b20e2731bd9d1703 Public Function GetFilters(ByVal controllerContext As ControllerContext, ByVal actionDescriptor As ActionDescriptor ) As IEnumerable(Of Filter) Implements System.Web.Mvc.IFilterProvider.GetFilters Dim result = New List(Of Filter)() For Each actionFilter As IActionFilter In container.ResolveAll(Of IActionFilter)() result.Add(New Filter(actionFilter, FilterScope.First, Nothing)) Next actionFilter Return result End FunctionFakePre-8ec59ce551544bff8b456bb43cf5654f-bc6f36074425424fbabce50e6b8894c3FakePre-898bc63e3c8b429699e87e69ec0e27b1-2e97b86888fa48d9a52ebf13467cbe9cFakePre-8790fd68c6c7494d9acfa657fdb2d541-2097d28d67384ae686f2998225d09f05FakePre-70cfb852aac44b69926c2636074287ce-b3ee1c8474924562aa932b0837a4f5c4

    Note:
    This implementation of GetFilters method is shorter than the one you have learned in “Global and Dynamic Action Filters” lab, where you ask if each controller or action was inside a list of accepted items.

Task 2 – Registering and Enabling the Filter

  1. In this task, you will enable site tracking and then you will register the filter in Global.asax.[cs|vb] Application_Start method to start tracing:
  2. Open Web.config at project root and enable trace tracking at System.Web group:

    XML

      <system.web>
    <trace enabled="true"/>FakePre-818a598b22114dba9d4159c8660f6715-dbf0db5a61a744948ad33e2b71ffc843

  3. Open Global.asax.[cs|vb] at project root.
  4. If you are using C#, add a reference to the Filters namespace:

    C#

    using System;
    FakePre-31bc72e6b71d437994fe1a000371a995-dfb8ecae0c2e4875acb595a120426412FakePre-b52a5d0d1019492a81dfde9095e00fd8-dd1a922f68e845f68ecc2c527ea5d61dFakePre-c2c4cf1e2b794e74b231fe23b8c5e052-f9676fa10cb4429194d9e180ccd5b570FakePre-51efc6bfe75a4b499d98aebe1199e4af-b96b4e4e0a1a4a76b9b2ede3fc3e12cbFakePre-c97d7f8ed15e43c190341c8e8aba67af-c22d10b9e26c437a843feaaaf9522caeFakePre-443f1f2fec6a48408a532861c8804193-87562c5a2a70409583275676ef363e8bFakePre-af06b78d4399400bb9938631ce878b39-d1132034a2ab48fab7e6bc3e9392ed8aFakePre-02cd02417c2046df808f159269ec6684-9e4a41ee975c491f8293039e8f724ef7FakePre-1751315c706740048671aafdfe4efd47-631cca49fe7f4186bfba77a01ff2aa5eusing MvcMusicStore.Filters;FakePre-3e7e42f4374b412586445846b5438749-0d5e1cadf5084e44afdb34b4ce723e9eFakePre-1f29738cda5e47d681b7e0662af3b79a-1c686f80b69747d2a631014fe0895ad9

  5. Select Application_Start method and register the filter in the Unity Container. You will have to register the filter provider and the action filter as well:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – Global asax unity registration - CSharp)

    C#

    protected void Application_Start()
    FakePre-884d2de226c5419c94a106015db32fcf-e42bb3e9980a42a389a88f38474f54c1FakePre-b8950d97abc64363968e4145597f7cba-dcedc5794fb24dffa18d4cc8fa22db5eFakePre-bc30517d67874d6cafb28064af0692c7-4d0e26e10bb84a36935e675c0a316e20FakePre-3bf2cdbb86da47ad8529781f58523798-ddc2053c24d14f2fbe0c01ec4fecb67cFakePre-4dd2e2f213744b1d9d1c599c1b26fe62-46e1c71ed4a946e494f9951ad08e3275FakePre-c6ad32760e5244f889e998a1d1b79160-9b2564c8eb8b40de8b2ae17cfc854213FakePre-2c0ff6940aaa4c48a2a8547b8d82c1e9-8ee8aadf432a452cadfb4fe022bc120eFakePre-9d8b5d1bf41f492cbbbb9f3159d33b93-1f820b96a66044e88858a42662858996FakePre-8a5c8bd757164415add1792ef89bf628-b56b6a802f524647908c57ea4d762fb7FakePre-a7d7167336444774a7b6301ba3b624fe-f91f9d3546714f378816fc4954149132FakePre-df0a4c4458d94486866b3c6607338b92-a3fc7b9a126b4e849d60482835ce2605FakePre-a8a7229e57fc472ea0aa96d73e9ac4f8-f78a4a73b2404498954b830d287539d0FakePre-351dd1231ecf4b5aaee2c09eb9d20ba6-a9056a5b58f344d18bd5f4fb616c987fFakePre-fe849f5c2f7540ea8c1d3683b83da6fa-e5844ba9013145f6a4498ce76d52e46bFakePre-ba403e6708284be38cc2f5255c8becc2-01c7d5759fe0450596e1902ba8e6b31bFakePre-c6bd1f17c08b4254bd5b1c6ef976d2d9-1d4420695d38400597b76f4d9177eb86FakePre-99427b5c82974fc4a9fd0c2c4d1cf9fd-d936c4c8e9d04fbcbb69295bc853cd96FakePre-dee0fe35183c40c3861384d36e135598-b1e6dc89b01d41c6bdc0e3008bc9afa3FakePre-a2bee89daaff4b9b8eac4784273271bf-85ab23aee4fe47c399b09507abf39fc6FakePre-de633974c95248eab9ea90619628fc33-6e1f4ff27f0a439c8e0c60ed53966e1bFakePre-e5a1e406f2634beaacb55f6e1150be60-94b8ee170bd047789b221211e8ff9632 container.RegisterInstance<IFilterProvider>("FilterProvider", new FilterProvider(container)); container.RegisterInstance<IActionFilter>("LogActionFilter", new TraceActionFilter());FakePre-8c3b406047c1452cad04d406bc6a2199-59f7f38a94e3438a81e944dcefa68b1fFakePre-5445037b735242f696057c855fdea2fe-2bc0e4d55a1946179537201b86cf3387FakePre-7beacfe8e6ea43bba58f3f7cc2669532-0017b92a0520461aa88ff0c579342616FakePre-d9a9eadc1593452484e2d49f3e7a2b2e-d6a6cfc6728b4d51976565a15648b448FakePre-6de0894277614f999b7c6c0fe1cec7e8-356939d282794b4ea483198c80d6155a

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex03 Injecting Action Filters – Global asax unity registration - VB)

    Visual Basic

    Protected Sub Application_Start()
    FakePre-cba1b38473784a4191cb7a9645fdc868-caded8a3e1d748f2a881bf76a9687800FakePre-c7a20ffe8dfd40e2992dd8fbe3075e2f-115151b6f62041dcb6b964b8c1e37be3FakePre-9c05abea5901494384164572a1cf3e85-394c6f82f8b14d4e8e27a269cf7ee817FakePre-257ed53227114ec8b302f28713824b77-2f218b96428d4410a0d5f18ef466bc2aFakePre-5f7c22712ca8478680f088e94971b0d0-cfbcb1d3446440799f29c92e69aedacdFakePre-70ca67aa474c477d810e7a9fb4adf6f1-7941f760cd454192842f0572908ac978FakePre-9293a58280464c89a49259e3dac9810d-e1354417ed1146ff86d854b753e346bdFakePre-2a03c22eae6b41fcb8b4cd4b95e2034f-9c91ba3c8af649f9aa3e8a6ce5e4bb24FakePre-0678b2f4ff2a4bb29afedf1e8413c063-471c807aab154b87b5e75d98a8e4b2c5FakePre-5bdf890811f94e4d8537766dd93a0a96-cad0b3af038a4c4c9985f94befbfeecdFakePre-c6b6364f4d5646e884dbba043a531c9c-5c6b6d23e4ca4c4a815a04f953466a1aFakePre-f8cab1fee3c0413085a5921a9e3a26b6-1e8dc3f99e294f92885d45ff516960d2FakePre-d53f0da38a22400ba7bacd13d31b2faa-82f7237549bb484a943518e76b16bd0aFakePre-6b68af47869f44eeae3a5ea55c5845bf-d944e12880894d5d9540a0c37f82443dFakePre-ef14696bf80b4df89424711594890eec-d85835bf92654303ac5712b0b05331ecFakePre-c1047ccad86d41c4bd326d50f3ec439a-8be3115556544fa899b17745eebdbe84FakePre-d5291ff1f38d444dbb2d9ad8b19355dd-082bd9b5762a402ca714db6cca6b4a03FakePre-6451ef6c86cf4bb39049d242eef6ed74-0c91e29a605145968d29247b8eeff4adFakePre-3f9372728541405d8a681eb9f17d8e50-e7d4ae5b48e34d4eb2e6bacc78bfb571FakePre-e22376631d4446849c865c7d21123c16-a126b947e332479484a39264fa1e38e3FakePre-53612239f4464c7993d632e4f5d82b7e-daf5253df69041f7aa71d24a12df3476FakePre-3f07be93ce1b434990c4573aea4d9ed8-356dbf65f8fd4d2aac3e762bd9d09c94 container.RegisterInstance(Of IFilterProvider)("FilterProvider", New FilterProvider(container)) container.RegisterInstance(Of IActionFilter)("LogActionFilter", New TraceActionFilter) FakePre-e99c44ffc757436e879e470621ef9917-f2e8153115de4059a9dbf90494dfd37cFakePre-2c328bc2893f4b38978be03a50f1dbb1-a36bb788b55f4d7bb0228b71137ac6beFakePre-056a1767ea6d4fd3a5f0a9eb32d8df26-4e4c3b633f46466a8af4c1a7c98ba00aFakePre-b1549f476d014db69b9d827914dadfc4-6e8838e7e63940a68dd8a98bddc96b08FakePre-bb7c7c6b24ca4fc6a1325799a33ab8bf-414dcae63dbd4ade8734ac77558f9f82FakePre-79c82647456e42aebcdd797e3b2ef8f1-e94e2c1696fe48509b2f6dd1474468c8

Task 3 – Running the Application

In this task, you will run the application and test that the custom action filter is tracing the activity:

  1. Press F5 to run the application.
  2. Browse to /Store and choose ‘Rock’ genre. You can browse to more genres if you want to.

    Figure 1

    Music Store

  3. Browse to /Trace.axd to see the Application Trace page, and then click the ‘View Details’ link at the right column for Store/:

    Figure 2

    Application Trace Log

    Figure 3

    Application Trace – Request Details

  4. Close the browser.

Next Step

Summary