2015-11-23 9 views
10

Vor wenigen Tagen wurde .NET Core RC1 veröffentlicht und ich habe es zum ersten Mal getestet, nachdem ich viel darüber gelesen habe. Ich mag es, aber es ist ein bisschen anders. Ich versuche, ein kleines Blog (eingebaut in MVC5) zu MVC 6 & .NET Core zu migrieren. Es war nicht schwer, aber ich habe wirklich Mühe, genau die gleichen globalen.asax-Einstellungen wiederherzustellen, die ich in MVC 5 hatte, ASP.NET 5 hat nicht mehr global.asax, so dass ich nicht herausfinden kann, was der Ersatz für die meisten Einstellungen ist sind?Migration von global.asax nach ASP.NET 5

protected void Application_Start() 
    { 
     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new RazorViewEngine()); 

     MvcHandler.DisableMvcResponseHeader = true; 
     AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 

     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
    } 

    protected void Application_BeginRequest() 
    { 
     Response.AddHeader("X-Frame-Options", "DENY"); 
    } 

    protected void Application_EndRequest() 
    { 
     if (Response.StatusCode != 301 && Response.StatusCode != 302) return; 

     var targetUrl = Response.RedirectLocation.Replace("ReturnUrl", "url"); 
     Response.RedirectLocation = targetUrl; 
    } 

    protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     string typeName; 

     byte userType = (byte)(Context.Request.IsAuthenticated ? byte.Parse(User.Identity.Name.Split('|')[2]) : 1); 

     switch (userType) 
     { 
      case 1: { typeName = "Client"; break; } 
      case 2: { typeName = "Admin"; break; } 
      default: { typeName = "Client"; break; } 
     } 

     var roles = new[] { typeName }; 

     if (Context.User != null) 
     { 
      Context.User = new GenericPrincipal(Context.User.Identity, roles); 
     } 
    } 

    private void Application_Error(object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 

     if (ex is HttpAntiForgeryException) 
     { 
      Response.Clear(); 
      Server.ClearError(); 
      Response.Redirect("/error/cookie", true); 
     } 
    } 

BITTE, gibt es eine Möglichkeit, den oben genannten Code in MVC 6 zu arbeiten, ohne irgendwelche der Einstellungen zu verlassen? Dies ist ein Deal Breaker für mich, DANKE.

+0

Es wäre ein interessantes Experiment, diesen Code auf ein Github Repo zu setzen und ihn nach der Konvertierung nebeneinander mit einem MVC 6 Projekt zu haben. Wenn Sie am Ende den Code drücken, lassen Sie es mich wissen, ich würde gerne sehen, wie es aussieht und was es braucht, um es zu portieren. – davidfowl

+0

Sie können alles tun, was Sie in global.aspx tun, aber durch die Verwendung von maßgeschneiderter Middleware. Making Middleware in asp.net Kern ist sehr einfach zu tun. http://andrewlock.net/adding-default-security-headers-in-asp-net-core/ –

Antwort

2

Nach this blogpost von Shawn Wildermuth und er hatte auch Webinar am Plural vor etwa einer Woche, wo er sagte, dass MVC 5 global.asax, packages.config und web.config in ASP 5 verschwunden sind. So in der ASP 5 alle Konfiguration von ehemaligen MVC 5 global.asax geht in neue root Startup.cs Datei.

+1

Ich verstehe das, aber wie kann ich alle oben genannten Code erfolgreich auf Startup.cs verschieben? Ich habe es nur geschafft, das Routing alleine zu verschieben. – Cindro

+0

@Cindro Leider ist es keine leichte Frage, da sich die Dinge sehr verändert haben, also weiß ich es nicht, tut mir leid. Zum Beispiel wurde die Bündelung fast vollständig geändert: siehe diesen Beitrag http://www.jeffreyfritz.com/2015/05/where-did-my-asp-net-bundles-go-in-asp-net-5/. Gleiche Dinge für viele Dinge, die von MVC 5 wie global.asax, packages.config und web.config verschwunden sind. Wahrscheinlich müssen Sie den Großteil Ihres Codes durch einen neuen Code ersetzen. – user2771704

+0

Ich weiß, lass uns hoffen, dass die Lösung/Alternative bald veröffentlicht wird. Btw, in Bezug auf die Bündelung in ASP.NET 5, können Sie dieses Paket verwenden, um wie in 4.5 zu bündeln: https://github.com/Shazwazza/Smidge – Cindro

3

Um Application_Start zu ersetzen, geben Sie Ihren Initialisierungscode in Ihre Startup-Klasse ein.

Application_BeginRequest, Application_EndRequest, Application_AuthenticateRequest und Application_Error kann durch eine middleware ersetzt werden (global.asax ist ein HTTP Module, die durch middleware ersetzen waren)

In Bezug auf Application_AuthenticateRequest, sollten Sie auch das Dokument lesen ein über Request features

+1

Ich verstehe das, aber ich kann kein gutes Tutorial finden, wie ich all diese Middlewares neu erstellen kann, die ich brauche. Ich bin nur frustriert, dass der ASP.NET Team würde so eine große Veränderung machen und keine klar dokumentierte Alternative bieten. – Cindro

+0

Ich bin mir sicher, dass sie das tun werden. Gib ihnen Zeit. Jeder beschäftigt sich damit, Probleme auf GitHub zu klären. Obwohl es produktionsbereit ist, hat es seine erste stabile Veröffentlichung noch nicht erreicht. – Dealdiane

+0

@Cindro, Es gibt ein Beispiel in [doc] (https://docs.asp.net/en/latest/fundamentals/middleware.html), überprüfen Sie auch das [Feature-Dokument anfordern] (https: //docs.asp .net/de/next/fundamentals/request-features.html # middleware-and-request-features), die helfen werden, 'Application_AuthenticateRequest' zu ersetzen –

2

Auch sein alte Frage Ich werde das, wie ich gesehen habe, dass niemand einen Hinweis gibt, wie man global.asax Methoden zu Startup.cs migrieren In der Configure sek tion von Startup-Datei, müssen Sie nur

app.Use(async (context, next) => 
       {  
       //this will be call each request. 
       //Add headers  
        context.Response.Headers.Add(); 
       //check response status code 
        if(context.Response.StatusCode == 404) //do something 
       //check user 
       context.User.Identity.IsAuthenticated 
       //redirect 
       context.Request.Path = "some url" 
       await next() // will call next logic, in case here would be your controller. 
       }); 

Das ist keine Arbeitslösung hinzuzufügen, dies nur zu zeigen, wie mit Middleware und Anwendung von Logik für jede Anforderung zu arbeiten.

Ich hoffe, es hilft.

+0

Dieser Code ist ein wenig schlampig, aber es erfasst alle Anfragen. Löste mein Problem, thx. – alexb

Verwandte Themen