Cấp bậc tác giả:

DOTNET

Làm thế nào để viết URL Rewriting với HttpHandler

Được viết bởi QuangIT ngày 15/04/2013 lúc 03:35 PM
Một ngày bạn có URL đánh dấu cuốn sách là http://abc.com/main/1.aspx. Nhưng bây giờ nó được chuyển đến http://xyz.com/main/1.aspx. Bạn là nhà phát triển trang web, bạn sẽ làm thế nào để quản lý các liên kết bị hỏng trong các trang web.
  • 0
  • 2426

Làm thế nào để viết URL Rewriting với HttpHandler


Hầu hết khi chúng ta bắt đầu làm cái gì đó chúng ta thường tự hỏi đầu tiên phải làm như thế nào? Hỏi ở đâu? Hỏi ai? 
A. Trường hợp 1 
Một ngày bạn có URL đánh dấu cuốn sách là http://abc.com/main/1.aspx. Nhưng bây giờ nó được chuyển đến http://xyz.com/main/1.aspx. Bạn là nhà phát triển trang web, bạn sẽ làm thế nào để quản lý các liên kết bị hỏng trong các trang web. 
B. Trường hợp 2 
Giả sử chúng ta có hai máy chủ, nơi mỗi máy chủ tổ chức gồm 50 trang. Nhưng tất cả các liên kết phải được thực hiện có sẵn cho cả các trang web. Làm thế nào để chúng ta xử lý tình trạng này? 
C. Trường hợp 3 
Cơ cấu lại trang web nguyên nhân tất cả các trang web trong thư mục /Admin/ được chuyển đến thư mục /finance/Admin/, bạn muốn sử dụng URL viết lại để kiểm tra xem yêu cầu web dành cho tập tin trong thư mục /Admin/. Yêu cầu tự động nên yêu cầu chuyển hướng cùng tập tin, nhưng trong thư mục thay thế /finance/Admin/. 
Vì vậy làm thế nào để chúng ta xử lý tất cả các kịch bản trên. Đối ASP cổ điển, nó là rất khó khăn để xử lý các tình huống, nơi mà chúng ta cho rằng khó nhai với bộ lọc ISAPI. Dĩ nhiên một số phần mềm của bên thứ ba hỗ trợ. Trong ASP.NET Http module xử lý tất cả các cách sử dụng URL Rewriting như một lựa chọn khác. 

I. ASP.NET URL Rewriting
Bằng cách sử dụng URL Rewriting, chúng ta có thể ngăn chặn yêu cầu Web đến và chuyển hướng yêu cầu đến trang tài nguyên khác nhau. Khi thực hiện URL Rewriting, thường là URL được yêu cầu kiểm tra và dựa trên giá trị của nó, yêu cầu được chuyển hướng đến URL khác nhau.
Vui lòng tham khảo bài viết cuối cùng, những gì sẽ xảy ra khi yêu cầu đến IIS, bạn sẽ thực sự thích chúng. Và đó là phải hiểu bài này. 

II. Thực hiện URL Rewriting
Ngày xưa URL Rewriting được thực hiện với các bộ lọc ISAPI ở cấp IIS Web server hoặc một số phần mềm của bên thứ ba, mà chúng ta sẽ không nói đến chúng ở đây. Trọng tâm chính của chúng ta là làm thế nào để thực hiện trong ASP.NET. Vì vậy, trong ASP.NET URL Rewriting có thể được thực hiện bằng cách sử dụng các mô-đun HTTP ở cấp ASP.NET. 
Sử dụng Http module bởi các đối tượng HttpContext trong phương thức RewritePath(). Ở đây tôi sẽ không giải thích HttpApplication hoặc HttpContext giả định rằng bạn đã đọc bài viết cuối của tôi. Nhưng có thể nói một điều rằng, lớp HttpContext chứa thông tin về yêu cầu HTTP cụ thể đó được nhận bởi IIS. Một ví dụ HttpContext được tạo ra cho yêu cầu đó. Đối tượng này chứa các thuộc tính để truy cập các đối tượng nội tại như yêu cầu, đáp ứng trong lượt truy cập đến Application, Session và đối tượng User 

III. URL Rewriting với Built trong module HTTP 
Chúng ta có thể sử dụng Http module để thực hiện URL Rewriting. Hãy để chúng ta hiểu chúng và sự kiện mà chúng được với trong IHttpHandler là gì. Chúng ta hãy xem một số mô-đun mà chúng ta sử dụng hàng ngày, đang làm việc với các mô hình
1. FormsAuthenticationModule 
Mô-đun này đặt danh tính của người sử dụng (để IPrincipal) trong HttpContext cho ứng dụng ASP.NET khi Form xác thực được kích hoạt. FormsAuthenticationModule cho thấy sự kiện AuthenticateRequest. Nơi chúng tacó thể kiểm tra người sử dụng được xác thực hay không. Nếu không chuyển hướng đến trang đăng nhập. Thông thường chúng ta sử dụng Response.Redirect () nhưng phương thức Context.RewritePath() là lựa chọn tốt.

void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
        {
            if (FormsAuthentication.Authenticate("a", "a") != true)
            {
                Context.RewritePath("WebForm2.aspx");
            }
        }

Vậy làm thế nào chúng ta thực hiện trong HttpModule

namespace dotnetgroup.SampleModules
{
    public class SampleModule : IHttpModule
    {
        public void Dispose()
        { }
        public void Init(HttpApplication context)
        {
            context.AuthorizeRequest += new EventHandler(OnAuthorizeRequest);
        }
        void OnAuthenticate(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication)sender;
            app.Context.RewritePath("WebForm1.aspx");
        }
    }
}

2. FileAuthorizationMoudle

Khi sử dụng Windows authentication, mô-đun HTTP này kiểm tra đảm bảo rằng các tài khoản người dùng có quyền đầy đủ truy cập các tài nguyên từ yêu cầu, và cung cấp dịch vụ cho phép chống lại các danh sách kiểm soát truy cập file hệ thống (ACL). Kiểm tra mã sau:

    IntPtr userToken = System.Security.Principal.WindowsIdentity.GetCurrent().Token;
            if (FileAuthorizationModule.CheckFileAccessForUser("~/WebForm1.aspx", userToken, "GET") == true)
                Response.Write("You have access !!");
            else
                Context.RewritePath("WebForm2.aspx");

So how we implement in HttpModule is

namespace Chinna.SampleModules
{
public class SampleModule : IHttpModule
{
public void Dispose()
{}
public void Init(HttpApplication context)
{
context.AuthorizeRequest += new EventHandler(OnAuthorizeRequest); }
void OnAuthorizeRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
app.Context.RewritePath("WebForm1.aspx");
}
}
}

3. UrlAuthorizationModule

Các UrlAuthorizationModule xác định xem người dùng hiện hành được phép truy cập vào URL được yêu cầu. Bạn có thể cho phép hoặc từ chối người dùng hoặc quyền sử dụng cho phép hoặc từ chối bổ sung trong yếu tố cấu hình trong web.config tương ứng. 

Cho phép và từ chối các bổ sung được giải thích theo thứ tự chúng xuất hiện trong cấu hình. Một khi yếu tố xác định truy cập được cho phép hoặc bị từ chối, UrlAuthorizationModule hoàn thành kiểm tra ủy quyền của nó. Ví dụ, phần uỷ quyền sau đây từ tập tin Web.config yêu cầu người dùng đăng nhập vào (bằng cách từ chối người dùng ẩn danh), và sau đó chỉ cho phép người sử dụng trong vai trò người quản trị có thể truy cập. Người sử dụng không trong vai trò quản trị viên bị từ chối. 
Ví dụ: Ví dụ các tài khoản truy cập vào dotnetgroup và các thành viên vai trò quản trị viên, trong khi từ chối Rick và tất cả tài khoản vô danh 

<authorization>
<allow users="dotnetgroup"/>
<allow roles="Admins"/>
<deny users="Rick"/>
<deny users="?"/>
</authorization>

IV. URL Rewriting với tùy chọn HTTP Modules

Chúng ta có thể thực hiện các tùy chỉnh URL Rewriting bằng cách thực hiện tùy chỉnh Http Module. Bạn có thể tham khảo bài viết cuối cùng của tôi. Hoặc xem ví dụ bên dưới. 

 public class SampleModule : IHttpModule
    {
        public void Dispose()
        { }
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(OnBeginRequest);
            context.EndRequest += new EventHandler(OnEndRequest);
        }
        void OnBeginRequest(object sender, EventArgs e)
        {
            HttpApplication appObject = (HttpApplication)sender;
            HttpContext contextObject = appObject.Context;
            contextObject.RewritePath("~/WebForm1.aspx");
        }
    }

Như tôi đã nói trước đó nó không phải là bắt buộc để viết tùy chỉnh module http và đăng ký chúng trong web.config. Bạn có thể thấy trong bài viết cuối của tôi đang sử dụng lớp HttpApplication và sự kiện của nó. Vì vậy, chúng ta có vị trí trong đó sử dụng lớp HttpApplication, đó là trang Global.asax là lớp HttpApplication mặc định cho các dự án ASP.NET. Di chuyển tới dự án Global.aspx.cs và thêm đoạn mã sau, bạn có thể viết trong tùy chỉnh mô-đun, bạn có thể viết trong tập tin Global.asax.cs

void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
        {
            if (FormsAuthentication.Authenticate("a", "a") != true)
            {
                Context.RewritePath("WebForm2.aspx");
            }
        }

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML