2013-02-05 27 views
20

Tôi muốn tạo một bộ mô hình tùy chỉnh trong ASP.Net Web API. Có rất nhiều tài nguyên về cách làm điều này từ đầu, nhưng tôi muốn tận dụng chức năng hiện có.Tương đương với DefaultModelBinder của MVC trong ASP.net Web API là gì?

Tôi đã xem xét nguồn gốc trên codeplex và có thể thấy rất nhiều modelbinders trong đó nhưng hầu hết đều được niêm phong ... và thậm chí sau đó tôi không thể tìm ra cái nào sẽ được sử dụng trong tình huống nào.

Đây là tiêu đề phương pháp api của tôi:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field) 

Những gì tôi muốn làm về cơ bản là đánh chặn các ModelBinder sau khi nó đã dân tất cả các thuộc tính cơ bản, và sau đó đặt một số giá trị thêm dựa trên tiêu đề yêu cầu http rằng tôi sẽ được đặt ở phía máy khách.

Như tôi đã nói, tôi cảm thấy thoải mái với việc tạo mô hình tùy chỉnh và các nhà cung cấp mô hình và kết nối chúng, bit mà tôi đang gặp phải đang cố gắng sử dụng lại chức năng hiện có được cung cấp.

Cảm ơn, Pete

Trả lời

10

Hãy xem ở đây cho các điểm mở rộng cho WebApi.

Không có tương đương chính xác cho DefaultModelBinder của MVC trong WebApi.

Nếu bạn đang sử dụng thuộc tính [FromBody] thì FormatterParameterBinding sẽ được gọi và MediaTypeFormatter sẽ được sử dụng để tạo mô hình của bạn.

Các chất kết dính mô hình cho đường dẫn URI và Url (Query Params) sẽ gọi ModelBinderParameterBinding mà sẽ truyền lại cho hoặc là một IValueProvider hoặc một IModelBinder ...

Vậy ...

Trong ví dụ của bạn Field (tùy thuộc vào kết quả của thương lượng loại nội dung) sẽ sử dụng một trong các cách sau: XmlMediaTypeFormatter, JsonMediaTypeFormatter hoặc FormUrlEncodedMediaTypeFormatter. Do đó, bạn có thể tùy chỉnh hành vi tuần tự hóa của các cài đặt này bằng cách sử dụng cài đặt tương ứng của chúng, ví dụ: Cài đặt JSON.NET ... hoặc triển khai MediaTypeFormatter của riêng bạn hoặc được bao bọc.

Trong ví dụ của bạn, appId có thể sẽ được chuyển đến số IValueProvider ... như ElementalValueProvider.

+0

Thankyou rất nhiều ... bạn chính xác. Tôi không nhìn thấy cây gỗ. Bây giờ tôi chỉ cần tìm ra đúng cách để quản lý việc tiếp tục nhiệm vụ không đồng bộ và tôi nghĩ rằng tôi được sắp xếp :) –

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