2016-08-02 34 views
8

Tôi nhận thấy khi sử dụng C# để xây dựng một dự án MVC cũ hơn, có rất nhiều tham chiếu đến một thư viện OWIN. Nhưng khi tạo một ứng dụng web .NET Core trong VS2015 SP3, có vẻ như không có tham chiếu đến nó.ASP.NET Core có còn sử dụng OWIN không?

Thư viện này có lỗi thời không?

+1

Có, OWIN vẫn là tiêu chuẩn được hỗ trợ chính. Net cung cấp các yếu tố cần thiết trần để xây dựng ứng dụng web của bạn. Kéo trong các gói OWIN từ Nuget. https://docs.asp.net/en/latest/fundamentals/owin.html –

+0

@MurrayFoxcroft: Không chính xác. .NET Core và ASP.NET Core ** không ** dựa trên OWIN. Nhưng họ hỗ trợ việc cắm OWIN Middleware. – Tseng

+0

@ Tseng, quả thật vậy, đó là lý do tại sao tôi nói hỗ trợ. –

Trả lời

10

OWIN không phải là thư viện, đó là specification. Từ tài liệu,

OWIN xác định giao diện chuẩn giữa máy chủ web .NET và ứng dụng web.

"Ý tưởng lớn" của OWIN là bạn có thể tách các ứng dụng khỏi máy chủ mà họ chạy, nếu mọi người có thể đồng ý về một giao diện chung để sử dụng. Trong thực tế, một máy chủ tương thích OWIN có thể chạy bất kỳ ứng dụng tương thích OWIN nào. Đây là một cải tiến so với các khớp nối chặt chẽ mà chúng tôi đã có trong quá khứ (các ứng dụng chỉ có thể chạy trên IIS, và đó là nó).

Rất nhiều thông số OWIN được dành để mô tả tên của các thuộc tính khác nhau. Một máy chủ tương thích OWIN biến đổi các yêu cầu gửi đến thành Dictionary<string, object> có chứa một loạt các khóa như owin.RequestBodyowin.ResponseBody. Nếu ứng dụng hoặc phần mềm trung gian mà yêu cầu được thông qua để biết cách đọc các khóa đó, nó có thể xử lý yêu cầu. Đó là nó!

Thư viện OWIN (như OWINMicrosoft.Owin), đây là một nguồn gây nhầm lẫn phổ biến. Các thư viện này chỉ là các triển khai kiểu an toàn của giao diện OWIN hoặc các trình trợ giúp giúp dễ dàng tương tác với các thành phần tương thích với OWIN hơn.

Như @Murray và @Tseng đã chỉ ra, ASP.NET Core không được xây dựng trên OWIN, nhưng nó tương thích với OWIN. Hoặc, thay vào đó, các máy chủ mà ASP.NET Core chạy trên (Kestrel, WebListener, IIS) là OWIN tương thích. ASP.NET Core là một trừu tượng hơn nữa về các yêu cầu cấp thấp ("mức OWIN") và làm cho nó dễ dàng để xây dựng những thứ như bộ điều khiển và các trang được hiển thị trên máy chủ.

Vì ASP.NET Core Tương thích với OWIN, thật dễ dàng cắm bất kỳ phần mềm trung gian tương thích OWIN nào. Các gói phần mềm Microsoft.AspNetCore.Owin cho thấy một phương pháp UseOwin:

app.UseOwin(pipeline => 
{ 
    pipeline(next => OwinHello); 
    // where OwinHello is a compatible middleware function 
}); 

Xem documentation để biết thêm ví dụ về cách thêm OWIN middleware để các đường ống dẫn ASP.NET Core.

+1

Có thể truy cập từ điển môi trường OWIN từ ASP.NET Core không? – Fred

+0

@Fred Có, thông qua thuộc tính 'HttpContext.Items'. –

+2

nhưng 'HttpContext.Items' là một' Dictionary 'trong khi từ điển môi trường OWIN là một' Dictionary '. Ngoài ra 'HttpContext.Items' là rỗng, vì vậy trong khi nó có thể được sử dụng để chia sẻ dữ liệu giữa phần mềm trung gian, nó không chứa môi trường OWIN gốc. – Fred

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