Đây là sự hiểu biết của tôi về việc bắt đầu / lưu trữ một ứng dụng web phát triển như thế nào vì nó khá khó hiểu để làm theo. Một tóm tắt nhỏ:
1. ASP.NET cổ điển: Chỉ viết mã ứng dụng để chạy ở bước cuối cùng của đường dẫn IIS bắt buộc
2. ASP.NET với OWIN: Cấu hình máy chủ web .NET và viết mã ứng dụng của bạn. Không còn được kết nối trực tiếp với IIS, vì vậy bạn không còn bị buộc phải sử dụng nó.
3. ASP.NET Core: Định cấu hình cả máy chủ và máy chủ web để sử dụng và viết mã ứng dụng của bạn. Không còn bắt buộc phải sử dụng máy chủ web .NET nếu bạn nhắm mục tiêu .NET Core thay vì .NET Framework đầy đủ.
Bây giờ tôi sẽ đi sâu hơn một chút vào chi tiết về cách thức hoạt động của nó và các lớp nào được sử dụng để khởi động ứng dụng:
ASP.NET cổ điển
Các ứng dụng ASP.NET cổ điển có Global.asax
tệp là điểm vào. Các ứng dụng này chỉ có thể được chạy trong IIS và mã của bạn được thực thi ở cuối đường dẫn IIS (vì vậy IIS chịu trách nhiệm về CORS, xác thực ... trước khi mã của bạn thậm chí chạy). Vì IIS 7, bạn có thể chạy ứng dụng của mình ở chế độ tích hợp tích hợp thời gian chạy ASP.NET vào IIS. Điều này cho phép mã của bạn định cấu hình chức năng không thể có trước đây (hoặc chỉ trong chính IIS), chẳng hạn như viết lại url trong trường Application_Start
hợp Global.asax
tệp của bạn hoặc sử dụng phần mới <system.webserver>
trong web.config
tệp của bạn .
ASP.NET với OWIN
Trước hết OWIN không phải là một thư viện mà là một đặc điểm kỹ thuật về cách các máy chủ web .NET (ví dụ IIS) tương tác với các ứng dụng web. Bản thân Microsoft đã triển khai OWIN được gọi là dự án Katana (được phân phối thông qua một số gói NuGet khác nhau). Việc triển khai này cung cấp IAppBuilder
giao diện mà bạn gặp trong một Startup
lớp và một số thành phần phần mềm trung gian OWIN (OMC) do Microsoft cung cấp. Sử dụngIAppBuilder
về cơ bản, bạn soạn phần mềm trung gian theo cách cắm và chạy để tạo đường ống cho máy chủ web (ngoài chỉ có đường dẫn ASP.NET trong IIS7 + như ở điểm trên) thay vì được gắn với đường dẫn IIS (nhưng giờ bạn sử dụng một thành phần phần mềm trung gian cho CORS, một thành phần phần mềm trung gian để xác thực ...). Do đó, ứng dụng của bạn không được kết nối cụ thể với IIS nữa và bạn có thể chạy nó trên bất kỳ Máy chủ web .NET nào, ví dụ:
- Các OwinHost gói có thể được sử dụng để tự chủ ứng dụng của bạn với một máy chủ web Katana.
- Các Microsoft.Owin.Host.SystemWeb gói được sử dụng để lưu trữ ứng dụng OWIN của bạn trong IIS7 + trong chế độ tích hợp, bằng cách đăng ký middleware của mình vào sự kiện cuộc đời đúng trong nội bộ.
Điều khiến mọi thứ trở nên khó hiểu là Global.asax
vẫn được hỗ trợ cùng với Startup
lớp OWIN , trong khi cả hai đều có thể làm những việc tương tự. Ví dụ: bạn có thể triển khai CORS trong Global.asax
và xác thực bằng phần mềm trung gian OWIN, điều này thực sự gây nhầm lẫn.
Nguyên tắc nhỏ của tôi là loại bỏ hoàn toàn các Global.asax
tập tin có lợi cho việc sử dụng Startup
bất cứ khi nào tôi cần thêm OWIN.
Lõi ASP.NET
ASP.NET Core là sự phát triển tiếp theo và bây giờ bạn có thể nhắm mục tiêu .NET Core hoặc .NET Framework đầy đủ. Khi bạn nhắm mục tiêu .NET Core, bạn có thể chạy ứng dụng của mình trên bất kỳ máy chủ nào hỗ trợ .NET Standard. Điều này có nghĩa là bạn không còn bị giới hạn đối với máy chủ web .NET (như ở điểm trước), nhưng có thể lưu trữ ứng dụng của bạn trong các thùng chứa Docker, máy chủ web linux, IIS ...
Điểm vào cho một ứng dụng web ASP.NET Core là Program.cs
tệp. Ở đó bạn định cấu hình máy chủ của mình và một lần nữa chỉ định Startup
lớp của bạn nơi bạn định cấu hình đường ống của mình. Sử dụng OWIN (bằng cách sử dụng IAppBuilder.UseOwin
phương thức mở rộng) là tùy chọn, nhưng được hỗ trợ đầy đủ .
AreaRegistration.RegisterAllAreas();
Đã gây ra lỗi cho tôi vì phương pháp này không được phép sử dụng trong quá trình khởi động như thế này, chỉ trongApplication_Start
. Tuy nhiên, ứng dụng của tôi là một API và phương pháp này rõ ràng chỉ hữu ích cho các ứng dụng MVC: stackoverflow.com/questions/18404637/ trộm