2016-12-12 9 views
2

ASP.Net MVC는 : ASP.NET 핵심 미들웨어에 의해 URL을 다시 작성하는 방법 asp.net 우리가 이런 식으로 같은 모듈을 재 작성 HTTP 모듈과 작업을 사용할 수 있습니다 4.0

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); 
    } 
} 

지금은 내가 어떻게 할 수 말해 ASP.NET 코어에서 위의 코드를 미들웨어로 다시 작성 하시겠습니까?

은 내가 단지 부분적으로

https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules 상세 나를 인도 해주십시오 기사를 읽었습니다. 덕분에

답변

2

당신은 코드를 미들웨어 클래스로 옮기고 System.Web 코드 대신 Core HttpContext를 사용해야합니다.

같은 클래스는 다음과 같이 보일 것이다 : 당신이 MVC 미들웨어를 등록하기 전에 다음, 당신 Startup.cs 파일에 등록

//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); 
    } 
} 

그것을 사용하려면, 같은 :

app.UseMiddleware<RedirectMiddleware>(); 

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

난 당신이 미들웨어에 대한 자세한 내용은 this 블로그 게시물을 볼 수 있습니다, 이것은 시작하기 바랍니다.

+0

페이지가 리디렉션되지 않으면 페이지가 리디렉션되지만 이동하지 않습니다. – 1AmirJalali