Tôi đang cố gắng triển khai tùy chỉnh MediaTypeFormatter
, nhưng phương pháp bool CanReadType(Type type)
luôn được gọi với loại IKeyValueModel
, thay vì loại của tôi MyProduct
.MediaTypeFormatter tùy chỉnh, tại sao IKeyValueModel chứ không phải kiểu mô hình của tôi?
Trong điều khiển API của tôi, tôi có:
[HttpPost]
public Task Save(MyProduct product)
Tôi đã thấy một số ví dụ (example 1, example 2), và tôi cũng đã cố gắng mã:
protected override bool CanReadType(Type type)
{
if (type == typeof(IKeyValueModel))
return false;
return true;
}
Nhưng sau đó tôi nhận được một " MissingMethodException: Không có hàm tạo tham số nào được định nghĩa cho đối tượng này ", bởi vì kiểu mô hình của tôi không có hàm tạo tham số. Vì vậy, có vẻ như vì CanReadType
trả về false thành IKeyValueModel
, khung sử dụng trình định dạng loại phương tiện khác. Trên thực tế, phương pháp OnReadFromStreamAsync
không bao giờ bị trúng.
Tôi muốn có thể kiểm soát cách mô hình của mình được deserialized, tôi muốn nhận được loại thực và không IKeyValueModel
.
Điều này đã hoạt động tốt trong MVC với trình kết nối mô hình.
Chúc mừng.
CẬP NHẬT 2012/05/29:
Nếu tôi loại bỏ các định dạng json mặc định nó hoạt động:
public static void RegisterApis(HttpConfiguration config)
{
config.Formatters.Clear();
Nhưng sau đó tôi sẽ muốn giữ cả hai, làm thế nào tôi có thể chỉ ra cái nào tôi muốn sử dụng?
Trân trọng.
Tại sao bạn cần tùy chỉnh 'MediaTypeFormatter'? – Aliostad
Hãy thử mã mới nhất (xây dựng hàng đêm), không có IKeyValueModel trong nguồn hiện tại. Nó đã bị xóa/xóa bởi nhóm. http://aspnetwebstack.codeplex.com/SourceControl/network/forks/BradWilson/AspNetWebStack/changeset/changes/5648aed69341 – user960567
@Aliostad Tôi cần một MediaTypeFormatter tùy chỉnh để kiểm soát cách các đối tượng của tôi được tuần tự hóa và deserialized thành JSON. – vtortola