2016-04-19 12 views
3

Wir versuchen, eine nicht gehostete Kopfzeile zu implementieren, die alles vor *.website.com in ASP.NET akzeptiert. Da jede Unterdomäne akzeptiert wird, haben wir die HttpContextBase-Klasse erweitert, um eine benutzerdefinierte Methode hinzuzufügen.URL-Umleitung auf OnActionExecuting-Methode

public static bool ValidateHost(this HttpContextBase context) 
{ 
    var domain = context.Request.Url.Host; 

    //add logic to check if the host is valid and the subdomain exist in the database 

    return false; 
} 

wird diese Methode validieren, ob die context.Url.Host eine gültige Host oder seine Sub-Domain in der Datenbank vorhanden, wenn nicht dann die Anforderung an den Host website.com Standard umleiten. Zu tun, dass ich diese Zeile von Codes hinzugefügt unten in unserem BaseController:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (!filterContext.HttpContext.ValidateUrl()) 
    { 
     filterContext.HttpContext.Response.Redirect("https://website.com/"); 
     return; 
    } 
} 

Es leitet Host auf Standard, wenn es false zurückkehrt, jedoch wirft es eine Ausnahme: {"Server cannot append header after HTTP headers have been sent."}

Bin ich hier etwas fehlt oder die Logik ist unvollständig?

Antwort

2

Try RedirectResult

filterContext.Result = new RedirectResult("https://website.com"); 
1

In HTTP gibt es immer einzelne Antwort für jede Anforderung. Dieser Fehler bedeutet also, dass Sie bereits etwas zur Antwort gesendet haben und erneut eine andere URL anfordern.