2016-12-12 8 views
2

in asp.net 4.0 url von Middleware neu zu schreiben, wir mir die Arbeit mit http-Modul neu zu schreiben Modul wie auf diese WeiseASP.Net MVC: Wie in ASP.NET Core-

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    string CountryCodeInUrl = "", redirectUrl=""; 
    var countryCode = CookieSettings.ReadCookie(); 
    if (countryCode=="") 
    { 
     countryCode = "gb"; 
    } 

    if (HttpContext.Current.Request.RawUrl.Length >= 2) 
    { 
     CountryCodeInUrl = HttpContext.Current.Request.RawUrl.Substring(1, 2); 
    } 

    if (countryCode != CountryCodeInUrl) 
    { 
     if (HttpContext.Current.Request.RawUrl.Length >= 2) 
     { 
      if (HttpContext.Current.Request.RawUrl.Substring(1, 2) != "") 
      { 
       countryCode = HttpContext.Current.Request.RawUrl.Substring(1, 2); 
      } 
     } 
     if(!System.Web.HttpContext.Current.Request.RawUrl.Contains(countryCode)) 
     { 
      redirectUrl = string.Format("/{0}{1}", countryCode, System.Web.HttpContext.Current.Request.RawUrl); 
     } 
     else 
     { 
      redirectUrl = System.Web.HttpContext.Current.Request.RawUrl; 
     } 
     CookieSettings.SaveCookie(countryCode); 
     System.Web.HttpContext.Current.Response.RedirectPermanent(redirectUrl); 
    } 
} 

jetzt sagen, wie kann ich verwenden können, den obigen Code durch Middleware in ASP.NET Core neu schreiben?

ich habe gerade diesen Artikel teilweise lesen https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules

mir bitte im Detail führen. Danke

Antwort

2

Sie müssen ziemlich einfach den Code in eine Middleware-Klasse verschieben und den Core-HttpContext anstelle von System.Web verwenden.

Eine Klasse wie das würde wie folgt aussehen:

//RedirectMiddleware.cs

public class RedirectMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public RedirectMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     string CountryCodeInUrl = "", redirectUrl = ""; 
     var countryCode = CookieSettings.ReadCookie(); 
     if (countryCode == "") 
     { 
      countryCode = "gb"; 
     } 

     if (context.Request.Path.Value.Length >= 2) 
     { 
      CountryCodeInUrl = context.Request.Path.Value.Substring(1, 2); 
     } 

     if (countryCode != CountryCodeInUrl) 
     { 
      if (context.Request.Path.Value.Length >= 2) 
      { 
       if (context.Request.Path.Value.Substring(1, 2) != "") 
       { 
        countryCode = context.Request.Path.Value.Substring(1, 2); 
       } 
      } 
      if (!context.Request.Path.Value.Contains(countryCode)) 
      { 
       redirectUrl = string.Format("/{0}{1}", countryCode, context.Request.Path.Value); 
      } 
      else 
      { 
       redirectUrl = context.Request.Path.Value; 
      } 
      CookieSettings.SaveCookie(countryCode); 
      context.Response.Redirect(redirectUrl, true); 
     } 

     await _next.Invoke(context); 
    } 
} 

es nutzen zu können, es dann Startup.cs Datei in Sie sich registrieren, bevor Sie die MVC-Middleware registrieren, wie folgt aus:

app.UseMiddleware<RedirectMiddleware>(); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "default", 
     template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

ich hoffe das Ihnen den Einstieg finden Sie this Blog-Post für weitere Informationen über Middleware sehen.

+0

es Dosis nicht umleiten die Seite sollte umgeleitet werden, aber es bewegt sich nicht – 1AmirJalali

Verwandte Themen