Вот что я сделал:
У нас есть базовый класс контроллеров, который мы используем для всех наших контроллеров, теперь мы переопределяем:
protected override void OnActionExecuted(ActionExecutedContext filterContext) {
var host = filterContext.HttpContext.Request.Headers["Host"];
if (host != null && host.StartsWith("cloudexchange.cloudapp.net")) {
filterContext.Result = new RedirectPermanentResult("http://odata.stackexchange.com" + filterContext.HttpContext.Request.RawUrl);
} else
{
base.OnActionExecuted(filterContext);
}
}
И добавил следующий класс:
namespace StackExchange.DataExplorer.Helpers
{
public class RedirectPermanentResult : ActionResult {
public RedirectPermanentResult(string url) {
if (String.IsNullOrEmpty(url)) {
throw new ArgumentException("url should not be empty");
}
Url = url;
}
public string Url {
get;
private set;
}
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
if (context.IsChildAction) {
throw new InvalidOperationException("You can not redirect in child actions");
}
string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);
context.Controller.TempData.Keep();
context.HttpContext.Response.RedirectPermanent(destinationUrl, false /* endResponse */);
}
}
}
Причина в том, что я хочу постоянное перенаправление (а не временное), чтобы поисковые системы исправляли все плохие ссылки.