using the following code
context.Response.StatusCode = 301;
context.Response.Redirect(newUrl, true);
context.Response.End();
I can see in
I am combining the answers above with something I use if I have old domains/sub-domains for different versions of a site that I want to redirect to the current, mostly for SEO reasons, so as to not have multiple versions of the same site at different URLs:
using System;
using System.Net;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace myapp.web {
public class Global : HttpApplication {
void Application_Start(object sender, EventArgs e) {
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest(object sender, EventArgs e) {
//some of these checks may be overkill
if ((HttpContext.Current != null)
&& (HttpContext.Current.Request != null)
&& (HttpContext.Current.Request.ServerVariables != null)
&& (!String.IsNullOrEmpty(HttpContext.Current.Request.ServerVariables["HTTP_HOST"]))
) {
switch (HttpContext.Current.Request.ServerVariables["HTTP_HOST"]) {
case "old.url.com":
HttpContext.Current.Response.RedirectPermanent("https://new.url.com", true);
//status code is not needed if redirect perm is used
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
HttpContext.Current.Response.End();
break;
case "nightly.old.url.com":
HttpContext.Current.Response.RedirectPermanent("https://nightly.new.url.com", true);
//status code is not needed if redirect perm is used
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
HttpContext.Current.Response.End();
break;
}
}
}
}
}
Response.Redirect() will overwrite the StatusCode property with the code for a redirect (302). Also, because you're using the Response.Redirect() overload taking the boolean parameter, you should set it to False if you want to call Response.End() yourself. Otherwise it's redundant and can cause errors.
Try the following (pre-ASP.NET 4.0; Adam Butler's answer covers the new best practice):
context.Response.Redirect(newUrl, false);
context.Response.StatusCode = 301;
context.Response.End();
301 is cache-able. if you are using ASP.NET 4.0 , you can use RedirectPermanent.
Also, set your statuscode after Redirect
also, look into these answers. Response.Redirect HTTP status code
If you're using ASP.Net 4.0, you can use Response.RedirectPermanent, which will use 301 instead of 302.