عنوان:

‫مشکل در OpenAPI با Record Types در .NET: راه حل با استفاده از Class


نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۱۰ ۰۴:۱۱
آدرس: www.dntips.ir
توسعه‌دهنده‌ای در .NET با مشکلی در استفاده از Record Types و OpenAPI در یک برنامه Minimal API مواجه شده است. مشکل اصلی زمانی رخ می‌دهد که از Enumها در Record Types استفاده می‌شود و OpenAPI به درستی مقادیر Enum را به عنوان رشته نمایش نمی‌دهد. برای رفع این مشکل، توسعه‌دهنده از JsonStringEnumConverter برای تبدیل مقادیر Enum به رشته استفاده کرده است. سپس، توسعه‌دهنده متوجه شده است که هنگام ایجاد یا به‌روزرسانی اشیاء با مقادیر Enum، هرگونه اشتباه املایی یا ورودی نامعتبر باعث بروز خطای 500 می‌شود و اطلاعات کافی برای مدیریت خطا ارائه نمی‌دهد. برای حل این مشکل، توسعه‌دهنده مقادیر Enum را به رشته تبدیل کرده و از Attribute [AllowValues] برای اعتبارسنجی ورودی استفاده کرده است. با این حال، در endpointهای GET که از [AsParameters] برای Binding پارامترها استفاده می‌کنند، SwaggerUI با خطای "Unable to cast object of type 'System.Attribute[]' to type 'System.Collections.Generic.IEnumerable1[System.ComponentModel.DataAnnotations.ValidationAttribute]'" مواجه شده است. پس از بررسی‌های متعدد، توسعه‌دهنده متوجه شده است که مشکل از استفاده از Record Types با Primary Constructor Syntax در ترکیب با Validation Attributes ناشی می‌شود. راه حل نهایی، جایگزینی Record Types با Class Types بوده است. با این تغییر، OpenAPI بدون هیچ مشکلی کار کرده است. توسعه‌دهنده نتیجه‌گیری کرده است که استفاده از Record Types با Primary Constructor Syntax در درخواست‌های GET با [AsParameters] و تولید OpenAPI doc، توصیه نمی‌شود و استفاده از Classها به عنوان جایگزین، راه حلی مناسب است.


مشاهده مطلب اصلی