Câu hỏi Lệnh thi hành cho ApiController


Có cái gì như thế này cho thứ tự phương pháp phổ biến?

http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-38-WebApiStackDiagramsNew/6428.ASP.NET_5F00_MVC4_5F00_WebAPI_5F00_StackDiagram_5F00_Future.jpg

Giải pháp Web Api của tôi bây giờ đã có một trật tự mới trong việc thực hiện một số phương pháp kể từ khi tôi nâng cấp từ phiên bản Beta / RC lên phiên bản RTM. (Không phải thứ tự ngược lại của việc xử lý thông báo)

Trước đó phương pháp này của APIControllers được gọi là:

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
{
}

Trước khi các phương pháp lọc của AuthorizationFilter của tôi

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
}

Sau khi RTM, OnAuthorization được gọi trước khi khởi tạo (). Có một số thông tin về thứ tự thực hiện của các phương thức ApiController và các thay đổi sau khi phát hành RTM không?


12
2017-09-05 08:23


gốc


Huh? nơi nào InitializeProcadController đến từ đâu? Đã không có một thứ như vậy bên trong mã nguồn của dự án cho đến nay, AFAIK. - tugberk
xin lỗi tôi có nghĩa là phương thức "Initialize ()" - user437899


Các câu trả lời:


Giả sử yêu cầu đi vào phạm vi ApiController, thứ tự hoạt động như sau:

  • Các ExecuteAsync phương pháp của ApiController Được gọi.
  • Các Initialize phương pháp của ApiController Được gọi.
  • Bộ chọn hành động đã đăng ký được truy xuất.
  • Các SelectAction phương thức của bộ chọn hành động đã đăng ký được gọi. Nếu chỉ có một phương thức hành động được so khớp, thì đường ống tiếp tục.
  • Tất cả các bộ lọc đã đăng ký cho hành động đã chọn được truy xuất.
  • Bộ lọc ủy quyền được gọi. Bộ lọc ủy quyền có thể quyết định để cho đường ống tiếp tục thực hiện hoặc chấm dứt đường ống.
  • Nếu Bộ lọc ủy quyền không chấm dứt yêu cầu, thì các ràng buộc tham số hành động được thực hiện.
  • ApiController.ModelState được đặt.
  • Bộ lọc hành động được gọi. Bộ lọc hành động có thể quyết định để cho đường ống tiếp tục thực hiện hoặc chấm dứt đường ống.
  • Nếu Bộ lọc hành động không chấm dứt yêu cầu, Người thực hiện tác vụ đã đăng ký được truy xuất.
  • Các InvokeActionAsync phương thức Action Invoker đã đăng ký được gọi để gọi phương thức hành động đã chọn.
  • Lưu ý: Nếu bất kỳ ngoại lệ nào xảy ra do việc thực thi các Bộ lọc ủy quyền để thực thi phương thức hành động, thì các bộ lọc ngoại lệ sẽ được gọi.

Có một vài điều nữa xảy ra ở giữa nhưng điều này là rất gần với một cái nhìn hoàn chỉnh. Kiểm tra ApiController mã nguồn để biết thêm thông tin.


36
2017-09-05 09:53



Và đây là lý do tại sao OperationHandlers thực sự tuyệt vời. Thật là một mớ hỗn độn. - Darrel Miller
Tôi tìm thấy OperationHandlers trên google, nhưng không phải cách tôi đăng ký OperationHandler tùy chỉnh của mình ... - user437899
BTW: Bộ lọc ủy quyền được gọi trước bộ lọc "bình thường" chung. - user437899
@ user437899 Thứ nhất, tôi không chắc chắn những gì u có nghĩa là bởi 'bình thường' bộ lọc cuz tất cả các bộ lọc bình thường. Thứ hai, có, bộ lọc ủy quyền được gọi là đầu tiên bên trong đường ống điều khiển như tôi đã chỉ ra trong câu trả lời của tôi. - tugberk
Hữu ích: ASP.NET Web API 2: Thông báo HTTP Vòng đời áp phích - Bart Verkoeijen