چگونه ERROR Post 400 را در بلیزور حل کردم
چند روز پیش که در حال کار کردن بر روی ماژول درخواست نمایندگی پروژه تحت وب مدیریت خدمات پس از فروش مشتریان در BLAZOR بودم به ارور عجیبی برخوردم که هیچ پیغام مناسبی هم برای راهنمایی ارائه نکرده بود. این ارور در حقیقت POST 400 ERROR بود که گاهی اوقات بنا به دلایلی در لایه Client در بلیزور به وجود می آید. در پروژه از AutoMapper استفاده کرده بودم تا از پیچیدگیهای بیهوده در هنگام استفاده از کلاسها در لایه های Shared و Server جلوگیری بشه. بعد از اجرای صفجه با ارور زیر مواجه شدم.
تمامی کلاسهای مربوط به بخش Server که با کلاس مربوطه در ارتباط بودن رو بررسی کردم و کلاسهایی که MAP شده بود رو هم دونه دونه بررسی کردم. همه چیز درست بود. ولی مشکل همینجا بود که همه چیز درست بود. به عبارت دیگه تمامی قیدهایی که در کلاس در بخش Server وجود داشت عینا به لایه Shared هم منتقل شده بود. البته کلاس موجود در لایه Shared دارای فیلدهای کمتری نسبت به کلاس اصلی بود. به همین خاطر از Mapping استفاده کرده بود.
Mapper.Map(AgeMp, Age);
Mapper.Map(Age, AgeMp);
کلاس مورد نظر به شکل زیر بود که در لایه SHARD استفاده شده بود:
public class AgeMp
{
[Key]
public int AgentId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Display(Name = "EmailAddress"), Required(ErrorMessage = "please enter {0} ")]
public string Email { get; set; }
[Required]
public DateTime? DateOfBrith { get; set; }
public String Address { get; set; }
[Required]
public Boolean BlnIsValidate { get; set; }
public ActivityType ActivityType { get; set; }
}
مشکل اساسی و اصلی این بود که فیلد BlnIsValidate که مقدارش هم باید وارد میشد و در حقیت از فیلدهای اجباری بود ولی مقدار دهی اولیه آن انجام نمیشد و طی عملیاتی در بخش Client بر اساس یک سری شرایط قرار بود مقدار دهی بشود ولی در همان ابتدا لازم نبود. به همین خاطر در هنگام ValidSUbmit در EditForm مربوطه در همان ابتدا ارور مشاهده می شد و هیچ دیتایی سمت Server ارسال نمی شد. در حدود یکی دو ساعت وقت گذاشتم تا متوجه شدم که ایراد از همان فیلد بود که باید مقداردهی اولیه می شد. اولین کاری که انجام دادم در لایه Shared عبارت [Required] رو حذف کردم. پروژه رو مجددا اجرا کردم و ارور رفع شده بود و محتوای درخواستی با ساختاری از کلاس به سمت لایه Server ارسال و به صورت کامل ثبت شد.