2009-03-16 4 views
2

Diese Frage war irgendwie berührt, aber nicht die Antwort, die ich suchte.IIS7 URL rewrite w/ASP.Net 3.5 SP1 + Asp: Login-Formular funktioniert nicht

Ich benutze das IIS7 URL Rewrite Modul, um meine Seiten umzuschreiben, und jetzt funktioniert mein asp.net Login Formular nicht !!!

Auf meiner Masterseite Ich habe diese (ASP.Net 3.5 SP1-Funktion) ...

if (!String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_ORIGINAL_URL"])) 
    { 
     form1.Action = Request.ServerVariables["HTTP_X_ORIGINAL_URL"]; 
    } 

, die die Seite Post zurück auf die aktuell neu geschrieben Seite macht.

Aber meine Login-Kontrolle nur Posts zurück, ohne irgendwelche Ereignisse auslösen. Deshalb loggt es sich nicht ein, die Ereignisse onlogginerror usw. zünden nicht, nichts !!

ich dies versucht habe ...

if (!String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_ORIGINAL_URL"])) 
    { 
     Login Login1 = LoginView1.FindControl("Login1") as Login; 
     if (Login1 != null) 
      Login1.DestinationPageUrl = Request.ServerVariables["HTTP_X_ORIGINAL_URL"]; 
    } 

ith vergeblich ...

Bitte beachten Sie auch ich das CSS-freundliche Adapter für die Anmeldungssteuer benutzen und sogar versucht, die Änderung diese Linie hier von ...

PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, clientSubmit, true, login.UniqueID); 

zu ...

PostBackOptions options = new PostBackOptions(btn, "", HttpContext.Current.Request.ServerVariables["HTTP_X_ORIGINAL_URL"], false, false, false, clientSubmit, true, login.UniqueID); 

ohne Erfolg ...

Bitte helfen :(

Antwort

1

Leider zu früh ... sprach

Wie in einem anderen Thema erwähnt, hat this web site die Lösung.

Fügen Sie einfach die App_Browser Datei hinzu, und erstellen Sie die Formular-Rewriter-Datei.

Form.browser:

<browsers> 
    <browser refID="Default"> 
     <controlAdapters> 
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" /> 
     </controlAdapters> 
    </browser> 

</browsers> 

FormRewriter.cs:

using System.Web; 
using System.Web.UI; 

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter 
{ 
    protected override void Render(System.Web.UI.HtmlTextWriter writer) 
    { 
     base.Render(new RewriteFormHtmlTextWriter(writer)); 
    } 
} 

public class RewriteFormHtmlTextWriter : HtmlTextWriter 
{ 
    public RewriteFormHtmlTextWriter(HtmlTextWriter writer) : base(writer) 
    { 
     this.InnerWriter = writer.InnerWriter; 
    } 

    public RewriteFormHtmlTextWriter(System.IO.TextWriter writer) : base(writer) 
    { 
     base.InnerWriter = writer; 
    } 

    public override void WriteAttribute(string name, string value, bool fEncode) 
    { 

     // If the attribute we are writing is the "action" attribute, and we are not on a sub-control, 
     // then replace the value to write with the raw URL of the request - which ensures that we'll 
     // preserve the PathInfo value on postback scenarios 

     if ((name == "action")) { 

      HttpContext Context = default(HttpContext); 
      Context = HttpContext.Current; 

      if (Context.Items["ActionAlreadyWritten"] == null) { 

       // Because we are using the UrlRewriting.net HttpModule, we will use the 
       // Request.RawUrl property within ASP.NET to retrieve the origional URL 
       // before it was re-written. You'll want to change the line of code below 
       // if you use a different URL rewriting implementation. 

       value = Context.Request.RawUrl; 

       // Indicate that we've already rewritten the <form>'s action attribute to prevent 
       // us from rewriting a sub-control under the <form> control 

       Context.Items["ActionAlreadyWritten"] = true; 
      } 
     } 

     base.WriteAttribute(name, value, fEncode); 
    } 
} 
+0

yep, das ist, was ich benutze - ich habe gerade gelesen, die Frage und wollte man dort Punkt :) ... auf eine unzusammenhängende Notiz, vorsichtig beim Umschreiben in eine URL, die tiefer ist als der physische Pfad der Seite, wenn Sie Probleme mit Sitzungen ohne Cookies bekommen (wegen eines ASP.net-Fehlers) – eglasius