Frage

Jetzt versuche ich, mit System.Web.Routing zu arbeiten. Alles ist ganz gut, aber ich kann nicht verstehen, wie Form-Authentifizierung Arbeit mit URL-Routing (Return-URL, Umleitung, etc.) zu machen. Google sagt nichts. Hilfe! :)

UPD: Ich habe vergessen - I nicht verwenden MVC . Das ist das Problem. Wie rounig und Form Authentifizierung ohne MVC verwenden

UPD2: mehr über mein Problem
Was ich will, bekommen: Urls solche „mysite.com/content/123“, „mysite.com/login/“ usw. unter Verwendung von Routen. Es ist wichtig, Login-Seite funktioniert wie „normale“ ASP.NET Login-Formular zu machen (Umleitungen von sicherem Bereich einzuloggen, wenn nicht anmelden auf, und umleiten Rückenbereich zu sichern, wenn loggined).
Das ist, was ich tue.
In global.asax auf Application_Start, registrieren Routen wie folgt aus:

routes.Add("LoginPageRoute", new Route("login/", new CustomRouteHandler("~/login.aspx")));
routes.Add("ContentRoute", new Route("content/{id}", new ContentRoute("~/content.aspx"))
{
    Constraints = new RouteValueDictionary {{ "id", @"\d+" }}
});

Wo CustomRouteHandler und ContentRoute - einfache IRouteHandler Klassen, wie einfach: ...

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
    var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
    return page;
}

...

Alles scheint perfekt zu sein: Ich bin immer content.aspx wenn gehen zu “/content/10” und login.aspx wenn gehen zu “/login/”. Aber ...
Wenn ich Inhalt gesichert (in web.config, mit deny=”?”) machen, Login-Formular funktioniert nicht wie erwartet.
Jetzt kann ich nicht die “/content/10” Seite erreichen:

0 ist. Ich bin eingeben “/content/10” in meinem Browser.
1. Site Umleitungen an “/login/?ReturnUrl=%2fcontent%2f10”. (Hm ... scheint wie alle Probleme hier beginnt, nicht wahr? :)
2. Ich versuche eingeloggt sein. Egal, welche Anmeldeinformationen ich eingegeben habe ...
3 ... Website umleitet mich “login?ReturnUrl=%2fContent%2f10”. (gelb Bildschirm Fehler - Access is denied. Beschreibung:. An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL)
Also, das Problem ist, wie ASP.NET echten ReturnUrl verstehen zu erhalten und die Umleitung nach der Anmeldung zur Verfügung stellen.

War es hilfreich?

Lösung

Diese Schritte sollten können Sie das gewünschte Verhalten implementieren.
Fassen wir zusammen:

  1. Sie verwenden Routing aber nicht MVC. Mein Beispiel wird Karte eine URL wie http: // host / Mysite / userid / 12345 auf eine reale Seite unter http: //host/Mysite/Pages/users.aspx Benutzer-ID = 12345 .
  2. Sie möchten an diese Adressen den Zugriff zu steuern, dass der Benutzer sich anmelden. Mein Beispiel hat eine Seite http: //host/Mysite/login.aspx mit einer Standard-Anmeldekontrolle, und die Website ist so konfiguriert, Formen Authentifizierung zu verwenden.

Schritt 1

Ich habe „versteckt“ die Inhalte der Seiten, Ordner diese web.config im Seite Ordner mit:

  <?xml version="1.0"?>
  <configuration>
    <system.web>
      <httpHandlers>
        <add path="*" verb="*"
            type="System.Web.HttpNotFoundHandler"/>
      </httpHandlers>
      <pages validateRequest="false">
      </pages>
    </system.web>
    <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
      <handlers>
        <remove name="BlockViewHandler"/>
        <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
      </handlers>
    </system.webServer>
  </configuration>  

Damit wird sichergestellt, dass, wenn jemand verwendet eine URL wie http: // host / Mysite / Pages / users.aspx? userid = 12345 , dann erhalten sie einen Standard-404-Antwort.

Schritt 2

Meine Top-Level-web.config-Datei enthält (sowie alle Standard-Material) das Aufnahmeelement:

  <location path="userid">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

Dies verhindert, dass die anonymen Zugriff auf URLs der Form http: // host / Mysite / userid / 12345 was bedeutet, dass Benutzer automatisch, dann login.aspx umgeleitet werden, wenn sie gültige Anmeldeinformationen angeben, werden sie an die richtige Stelle weitergeleitet werden.

Schritt 3

Als Referenz hier ist mein global.asax:

<script RunAt="server">

    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RegisterRoutes(RouteTable.Routes);
     }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.RouteExistingFiles = true;
        routes.Add("UseridRoute", new Route
        (
           "userid/{userid}",
           new CustomRouteHandler("~/Pages/users.aspx")
        ));
    }

</script>

Und hier ist meine Route-Handler:

using System.Web.Compilation;
using System.Web.UI;
using System.Web;
using System.Web.Routing;
using System.Security;
using System.Web.Security;


public interface IRoutablePage
{
    RequestContext RequestContext { set; }
}

public class CustomRouteHandler : IRouteHandler
{
    public CustomRouteHandler(string virtualPath)
    {
        this.VirtualPath = virtualPath;
    }

    public string VirtualPath { get; private set; }

    public IHttpHandler GetHttpHandler(RequestContext
          requestContext)
    {
        var page = BuildManager.CreateInstanceFromVirtualPath
             (VirtualPath, typeof(Page)) as IHttpHandler;

        if (page != null)
        {
            var routablePage = page as IRoutablePage;

            if (routablePage != null) routablePage.RequestContext = requestContext;
        }

        return page;
    }
}

Andere Tipps

Das erste Ergebnis, das ich von einer Google-Suche bekam ist Frederiks ausgezeichneter Beitrag auf bildet Authentifizierung in ASP.NET MVC . Beachten Sie, dass die Post war relevant für eine frühe Version von ASP.NET MVC, müssen Sie schreiben und testen Sie den Code.

HTH, Indy

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top