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();
}
}
}