Frage

in der Regel, wenn ich an einer ASP.Net MVC-Anwendung aussehen, wird die Route-Tabelle beim Start konfiguriert und berührt nicht immer nach.

Ich habe ein paar Fragen über das, aber sie sind eng miteinander verwandt:

  • Ist es möglich, die Route-Tabelle zur Laufzeit zu ändern?
  • Wie würde / sollte ich vermeiden Threadingprobleme?
  • Gibt es vielleicht eine bessere Möglichkeit, eine dynamische URL zur Verfügung stellen? Ich weiß, dass IDs etc. in der URL erscheinen kann, aber nicht sehen, wie dies anwendbar sein könnte, in dem, was ich erreichen will.
  • Wie kann ich das vermeiden, auch wenn ich die Standard-Controller / Action-Route festgelegt haben, geht das Standardroute nicht Arbeit für eine bestimmte Kombination, z.B. die „Post“ Aktion auf dem „Kommentar“ Controller ist über die Standardroute nicht verfügbar?

Hintergrund: Kommentar Spammers greift in der Regel über die Entsendung URL von der Website und dann nicht der Mühe über die Website geht mehr ihren automatisierten Spam zu tun. Wenn ich regelmäßig meine Post-URL zu einem gewissen gelegentlichen ändern, würden Spammer müssen zurück auf die Website gehen und die richtige Post-URL finden Spamming zu versuchen. Wenn das URL ändert sich ständig glaube, ich würde, dass das könnte die Spammer Arbeit mühsamer machen, was sollte in der Regel bedeuten, dass sie auf die betroffene URL geben.

War es hilfreich?

Lösung

In Anbetracht des eigentlichen Problem Hintergrund, ist die übliche Vorgehensweise ist eine dynamisch erzeugte Transaktionsnummer enthalten. Es sollte auch in dem Server-Seite Sitzung Wörterbuch in einem versteckten Formularfeld gespeichert werden und nur für genau eine Anforderung gültig sein.

denke ich heute vielen Rahmen, wie ein Sicherheitsmechanismus bereitzustellen; während dieses Angriffs Typ wird als Cross-Site-Request-Forgery (CSRF).

bekannt

Andere Tipps

Ich würde meine eigenen IRouteHandler zu implementieren und einige benutzerdefinierte Logik in meinen benutzerdefinierten ControllerActionInvoker setzen. Wie wäre es? Die Routentabelle nicht dynamisch ändern würde, aber man könnte für einen Zufallsparameter in der Route Weg in Ihren benutzerdefinierten ControllerActionInvoker überprüfen und ruft oder nicht die entsprechende Aktion.

Meine Route:

routes.Add 
( 
    new Route 
        ( 
            "blog/comment/{*data}", 
            new RouteValueDictionary(new {controller = "blog", action = "comment", data = ""}), 
            new MyRouteHandler() 
        ) 
); 

Meine I Route Handler:

    class MyRouteHandler : IRouteHandler 
{ 

public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
        return new MyHttpHandler(requestContext); 
    } 
}`

Mein Handler:

class MyHttpHandler : MvcHandler 
{ 
    public MyHttpHandler(RequestContext requestContext) : base(requestContext) 
    { 
    } 

    protected override void ProcessRequest(HttpContextBase httpContext) 
    { 
        IController controller = new BlogController(); 
        (controller as Controller).ActionInvoker = new MyActionInvoker(); 
        controller.Execute(RequestContext); 
    } }`

und meine Aktion ivoker, wo die benutzerdefinierte Logik für eine Aktion der Handhabung oder nicht codiert werden soll:

    class MyActionInvoker : ControllerActionInvoker 
{ 
    protected override ActionResult InvokeActionMethod(MethodInfo methodInfo, IDictionary<string, object> parameters) 
    { 

        var data = ControllerContext.RouteData.GetRequiredString("data"); 


 // put my custom logic to check whetever I'll handle the action or not. The data could be a parameter in the database for that purpose.

        return base.InvokeActionMethod(methodInfo, parameters); 
    } 
} 

Ich weiß es nicht, es ist die beste Lösung, aber jetzt ist es derjenige, der mir in den Sinn kommt.

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