In the example, the part of the URL that is `http://site/News/
` is the URL to a page instance of model type `NewsContainer
`. By registering a partial router for `ModelType NewsContainer
`, the partial router takes care of routing the remaining part of the URL. The partial router handles routing `Sports/TheGame/
`.
## Extend routing for the NewsContent type
The following example extends routing for the `NewsContainer
` content type:
This code example is just one way of implementing a partial router and uses DDS as external storage and no caching, it is not meant as production-ready code.
## Implement NewsContentStore
Create a simple store to deliver `NewsContent
` instances because `NewsContent
` is stored outside Optimizely Content Management System (CMS) (in Optimizely Dynamic Data Store).
You also could return the routed data as `IContent
` instances, where the data can be delivered through a custom content provider. Or, you can store the data in CMS so that no provider is needed and the data can be loaded or saved through `EPiServer.IContentRepository
`.
In the following example, partially route URL parts like _Sports/TheGame/_Â by adding a method to the store that accepts a category (that corresponds to _Sports_ in the URL example) and the name of an article (that corresponds to _TheGame_ in the URL example).
## Implement IPartialRouter
Make the partial router handle incoming requests beyond pages of type `NewsContainer
`. Also, allow outgoing FURLs to be created for instances of `NewsContent
`.
## Register a router
The following example initializes code that registers the partial router.Â
## Register MVC controllers
In CMS, you register an MVC controller for a Model type by implementing the `EPiServer.Web.IRenderTemplate<TModel>
`Â interface. This is done implicitly if your controller inherits `EPiServer.Web.Mvc.PageController<TPage>
` or `EPiServer.Web.Mvc.BlockController<TBlock>
`. The following code is for an MVC controller for `NewsContent
` and `NewsContainer
` that uses an extension method in the `EPiServer.Web.Routing
` namespace.
## Create MVC views
To display a single news from the above controller, create a view located as _/Views/NewsContent/index.aspx_. Also, create a view for the `NewsContainer
` class that lists all news with partial routed FURLs.Â
## Create outgoing URLs
To create an outgoing URL for a `NewsContent
` item, call the `EPiServer.Web.UrlResolver.Current.GetVirtualPathForNonContent
` method. For `IContent
` instances, you also can call the `GetVirtualPath
` or `GetUrl
` methods and pass in the reference to the content. In web forms, you can create a link in the HTML, such as _/Templates/NewsContent.aspx?id=7\_\_news_, then the FURL module calls the partial router during outgoing parsing to create an FURL for the content. The following example shows how to construct outgoing FURLs.
## Create NewsContent
The following example shows how to route to data that is stored outside CMS. Use `DynamicDataStore
` to store `NewsContent
`. The following code creates `NewsContent
` instances and stores them in `DynamicDataStore
`.