Perhaps this will get old quick; I don't know. Had a small research task for this. In this case I'm using a couple WebAPI controllers along with OWIN to demo.
- Create new console application.
- Install nuget packages Microsoft.Owin.SelfHost, Microsoft.AspNet.WebApi.Owin
- Create RedirectMiddleware.cs like below (source)
- Create Startup.cs like below
- Make Program.cs (self-host starter) like below.
- Add a couple controller classes, I added AController and BController.
public class RedirectMiddleware : OwinMiddleware { public RedirectMiddleware(OwinMiddleware next) : base(next) { } public async override Task Invoke(IOwinContext context) { var url = context.Request.Uri; var shouldRedirect = ShouldRedirect(url.AbsoluteUri); if (shouldRedirect.Item1) { // permanent redirect context.Response.StatusCode = 301; context.Response.Headers.Set("Location", shouldRedirect.Item2); } else { await Next.Invoke(context); } } private Tuple<bool, string> ShouldRedirect(string uri) { if (uri.EndsWith("A")) { return Tuple.Create(true, "/B"); } else { return Tuple.Create(false, ""); } } }
class Startup { public void Configuration(IAppBuilder appBuilder) { // Setup WebAPI configuration var configuration = new HttpConfiguration(); configuration.Routes.Add("API Default", new HttpRoute("{Controller}")); /// Register our middleware /// Order of registration is the order the middleware will execute in. appBuilder.Use(); // Register the WebAPI to the pipeline appBuilder.UseWebApi(configuration); appBuilder.Run((owinContext) => { owinContext.Response.ContentType = "text/plain"; return owinContext.Response.WriteAsync("Controllers are /A and /B. http://localhost:5000/A will take you to B"); }); } }
class Program { static void Main(string[] args) { const string baseUrl = "http://localhost:5000/"; using (WebApp.Start<Startup>(baseUrl)) { Console.WriteLine("Hit me up @ http://localhost:5000. Press Enter to shut down."); Console.ReadKey(); } } }