2016-05-11 23 views
5

Với này trong khi khởi động ứng dụng của tôi ...Owin Stage Markers

app.Use((context, next) => 
{ 
    return next.Invoke(); 
}).UseStageMarker(PipelineStage.PostAuthenticate); 


app.Use((context, next) => 
{ 
    return next.Invoke(); 
}).UseStageMarker(PipelineStage.Authenticate); 

... tại sao mã PostAuthenticate thực hiện trước khi mã Authenticate?

Tôi không có nghĩa là "tại sao app.use đầu tiên được gọi trước ứng dụng thứ hai.use" Ý tôi là: Tại sao lệnh gọi đầu tiên được gọi trước số thứ hai cho rằng thứ hai sẽ xảy ra trước đó trong yêu cầu đường ống?

EDIT

liên quan đến vấn đề này: How am I getting a windows identity in this code?

+0

Cơ sở hạ tầng sẽ xây dựng đường ống của các thành phần phần mềm trung gian dựa trên thứ tự mà chúng được thêm vào đối tượng IAppBuilder trong phương thức Cấu hình. – Nkosi

+0

để các điểm đánh dấu sân khấu không phục vụ mục đích gì? – War

Trả lời

5

Theo thiết kế, theo tài liệu: https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline.

Trong phần Stage Marker Rules, bạn có thể đọc phần sau đây:

Đường ống dẫn dầu OWIN và các đường ống dẫn IIS có trật tự, do đó các cuộc gọi đến app.UseStageMarker phải theo thứ tự. Bạn không thể đặt trình xử lý sự kiện thành sự kiện đứng trước sự kiện cuối cùng đã đăng ký với app.UseStageMarker. Ví dụ, sau khi gọi:

app.UseStageMarker(PipelineStage.Authorize); 

cuộc gọi đến app.UseStageMarker qua Authenticate hoặc PostAuthenticate sẽ không được chấp nhận, và không có ngoại lệ sẽ được ném ra. Các thành phần trung gian của Owin (OMC) chạy ở giai đoạn mới nhất, theo mặc định là PreHandlerExecute. Các đánh dấu giai đoạn được sử dụng để làm cho chúng chạy sớm hơn. Nếu bạn chỉ định dấu giai đoạn không đúng thứ tự, chúng tôi sẽ làm tròn đến điểm đánh dấu trước đó. Nói cách khác, thêm một điểm đánh dấu sân khấu nói "Chạy không muộn hơn giai đoạn X". OMC chạy ở điểm đánh dấu giai đoạn sớm nhất được thêm vào sau khi chúng trong đường ống OWIN.

+0

Thú vị, tôi chưa từng thấy điều này trước đây. giải thích hành vi kỳ quặc mà tôi đã thấy. Thật là một thiết kế kỳ lạ. – War

+0

'UseStageMarker' là một phần mở rộng, vì vậy nó đòi hỏi' sử dụng Microsoft.Owin.Extensions; ' – Tonatio

0

Dường như ngay cả trái với những sự kiện tài liệu trong IIS được nối và xử lý theo thứ tự chúng được cấu hình chứ không phải theo thứ tự chúng nên xuất hiện trong vòng đời yêu cầu.

Điều này giống như một lỗi trong vòng đời yêu cầu nợ với tôi nhưng hey, tôi đã giải quyết được vấn đề của mình.

Các vấn đề liên quan