Laden...

[erledigt] MVC: Server cannot set status after HTTP headers have been sent

Erstellt von Noodles vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.655 Views
N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 12 Jahren
[erledigt] MVC: Server cannot set status after HTTP headers have been sent

Hallo,

ich habe ein Filter der sich um ein Weiterleiten auf die Loginseite, im Falle eines Timeouts bei Ajax Aufrufen, kümmern soll.
Leider kommt ständig die Fehlermeldung 'Server cannot set status after HTTP headers have been sent'. Ich benutze FormsAuthentication.

Hat jemand eine Idee, an was es liegen könnte? Ich hatte den gleichen Code in einer anderen Anwendung laufen, allerdings mit einem MembershipProvider. Es ist der einzige Unterschied.

public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
                filterContext.HttpContext.Response.StatusCode = 403;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
                filterContext.HttpContext.Response.End();
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
}
16.807 Beiträge seit 2008
vor 12 Jahren

Hallo,

wo definierst Du das? Am Controller, oder an einer Action?
Haben die betreffenden Stellen schon andere Authorize-Attribute?
Benutzt Du im Allgemeinen ein eigenes Authorize-Attribut, oder ist das nun eine Misching aus MVC und eigenem?

N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 12 Jahren
  1. Controller
  2. NEIN
  3. NUR mein Attribut
16.807 Beiträge seit 2008
vor 12 Jahren

Das ist nun irgendwie ein Widerspruch.
Du nutzt keine anderen Attribute und nutzt auch NUR dieses - nichts MVC eigenes. Jeder Controller hat dieses Ajax-Attribut (hat er keines, nutzt er MVC-Zeugs).
Das bedeutet, dass Du nur Ajax-Anfragen hast und überall dieses Ajax-Attribut setzt?!

Ich nehm mal an, dass ich versteh, was Du mir sagen willst.
Nimm mal das else da weg, sprich, dass base.HandleUnauthorizedRequest(filterContext); immer ausgeführt wird; das kommt mir bisschen komisch vor.
Was das TrySkip da im speziellen soll weiß ich nicht. Ist ja jetzt kein CustomError.

Zudem sollte der Fehler Code eher 401(Unauthorized) sein und nicht 403 (Forbidden), oder?
HttpStatusCode Enumeration

N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 12 Jahren

Das ist nun irgendwie ein Widerspruch.
Du nutzt keine anderen Attribute und nutzt auch NUR dieses - nichts MVC eigenes.

Das hast Du nicht gefragt und ich nicht behauptet!

Was das TrySkip da im speziellen tut / soll weiß ich nicht.

Sorry, dann muss sich informieren, bevor man antwortet!

Zudem sollte der Fehler Code eher 401(Unauthorized) sein und nicht 403 (Forbidden), oder?

Nein muss er nicht.

An alle anderen.
Nach ewigen versuchen habe ich dann einen "wirklich" guten Tip im Internet gefunden, mit welchem das ganze jetzt augenscheinlich funktioniert.
Folgende Zeile muss im if-Zweig ergänzt werden:

filterContext.Result = new EmptyResult();

Warum es in einer anderen Anwendung funktioniert hat und meiner aktuellen nicht, muss ich jedoch noch ergründen.