2014-08-31 17 views
5

Tôi đã duyệt và googling về cách những thứ như OWIN móc trên các hoạt động ASP.NET.Làm thế nào OWIN móc trên ASP.NET khởi động

Tôi biết nếu chúng ta tạo OWIN tự lưu trữ, chúng tôi sẽ gọi nó theo cách thủ công và rõ ràng là chúng tôi đang gọi OWIN để bắt đầu chạy.

Tuy nhiên, tôi thấy rằng OWIN được tự động gọi khi ASP.NET bắt đầu mà không cần phải gọi webapp bắt đầu hoặc bất cứ điều gì khác. OWIN chỉ cần móc vào ASP.NET và hoạt động như một kẻ đánh chặn trên mỗi yêu cầu.

Ví dụ của tôi sẽ là signalr, chúng tôi gọi ánh xạ của signalr trong phương thức cấu hình OWIN. Tuy nhiên, tôi không thấy bất cứ điều gì có thể có thể gọi phương thức cấu hình OWIN. Nhưng signalr đã được ánh xạ và hoạt động.

OWIN đã gắn kết các hoạt động ASP.NET như thế nào? Có phải OWIN đã đăng ký các móc hoặc ASP.NET giờ đây nhận dạng OWIN và gọi tự động không?

Trả lời

4

Bạn sẽ có một dòng tương tự như thế này trên dự án của bạn:

[assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))] 

Dòng trên thông báo NET lớp và phương thức này sẽ được gọi ngay từ đầu.

Alternative bạn có thể cấu hình khởi động trong webconfig

<appSettings> 
... 
<add key="owin:appStartup" value="MyApp.Security.Authentication.Startup" /> 
... 
</appSettings> 

Từ thời điểm đó, bạn có thể đặt các thành phần OWIN, cũng như tất cả các mục cấu hình bạn thường đặt trong xử lý sự kiện Global.asax Application_Start.

Xóa lớp Global.asax: Nếu bạn sử dụng OWIN, không cần sử dụng lớp Gobal.asax và kích hoạt sự kiện Application_Start để bạn có thể xóa nó.

Mã ví dụ về Startup.cs

using System.Web.Http; 
using Microsoft.Owin; 
using Owin; 

[assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))] 
namespace MyApp.Security.Authentication 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      HttpConfiguration config = new HttpConfiguration(); 
      WebApiConfig.Register(config); 
      app.UseWebApi(config); 
     } 
    } 
} 

được sửa đổi:

OWIN sử dụng một lớp khởi động, nơi bạn có thể chỉ định các thành phần bạn muốn bao gồm trong các đường ống dẫn ứng dụng. Nếu bạn nhìn vào Katana source code, máy chủ lưu trữ Katana SystemWeb sử dụng PreApplicationStartMethodAttribute để nối vào khởi động ứng dụng. PreApplicationStartMethodAttribute, được giới thiệu trong .NET 4, cho phép bạn có mã chạy sớm trong đường dẫn ASP.NET khi ứng dụng khởi động. Tôi có nghĩa là cách sớm, ngay cả trước khi Application_Start.

Kiểm tra phần "Phát hiện lớp khởi động Owin" trong số link và điều này link về PreApplicationStartMethodAttribute.

+1

Vì vậy, ASP.NET đã được nâng cấp để nó tìm kiếm khởi động OWIN ngay từ đầu? Có thể cho tôi để tạo ra OWIN giống như khuôn khổ những người có thể móc các hoạt động ASP.NET mà không được gọi là thủ công? –

+2

Như tôi đã hiểu, gói NuGet "Microsoft.Owin.Host.SystemWeb" là trách nhiệm của quá trình Khởi động này. Gói này là cần thiết để phát hiện khởi động trong ứng dụng được lưu trữ IIS: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection. –

+1

Câu hỏi của tôi là làm thế nào họ đã làm điều đó, làm thế nào Microsoft.Owin.Host.SystemWeb như bạn đã nói, móc vào các hoạt động khởi động IIS và ASP.NET. –

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