2012-04-01 10 views
0

nicht erweitert Obwohl der Titel alles sagt, möchte ich Sie das bestimmte Szenario wissen lassen, wo ich das brauche.Get System.Web.HttpResponse aus einer Klasse, die System.Web.UI.Page

In der Anwendung möchte ich einen Benutzer abmelden, indem ich eine JavaScript-Methode aufruft. Diese Methode ruft abwechselnd eine WebMethode auf:

namespace EMSApplication.Web.WebServices { 
    /// <summary> 
    /// Holds the Webservice methods of EMSApplication 
    /// </summary> 
    [WebService(Namespace = "http://ems-app.com/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [System.Web.Script.Services.ScriptService] 
    public class EMSWebService : System.Web.Services.WebService { 

     [WebMethod] 
     public string Logout() { 
     if (User.Identity.IsAuthenticated) { 
      System.Diagnostics.Debug.WriteLine(" ==JYM00000000000000000000000000000"); 
      FormsAuthentication.SignOut(); 
      Response.Redirect("~/default.aspx"); 
     } 
     return ""; 
     } 
    } 
} 

Wie kann ich das lösen?

Antwort

2

Das Response.Redirect erstellt eine 302 HTTP-Antwort, die für den Browser bedeutet, dass es den Benutzer an diesen neuen Speicherort umleiten muss.

Da nun der Aufruf von Javascript erfolgt, muss das JavaScript die Antwort interpretieren und den Browser anweisen, den neuen Speicherort zu laden.

Der einfachste Weg, ich bin jetzt denken, ist die Logout() -Methode die neue Position zurückzukehren und JavaScript die Eigenschaft window.location

window.location = msg.d; 

Von einem WebService stellen Sie die Antwort von Httpcontext-Klasse zugreifen (HttpContext.Current.Response.Redirect()), aber Sie werden das nicht brauchen. Eigentlich glaube ich nicht, dass ein Webservice eine andere Antwort schreiben sollte als die üblichen (SOAP, etc).

2
HttpContext.Current.Response 

Dies ist eine statische Eigenschaft.

Verwandte Themen