مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

اشکال در API

چهارشنبه, 01 خرداد 1398 13:24

اشکال در API

با سلام من توسط MVC و SQL  یه API درست کردم ولی مشکل اینجاس که با این اررور مواجه میشم :

{"$id":"1","Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'text/html; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"$id":"2","Message":"An error has occurred.","ExceptionMessage":"Error getting value from 'TBLLogBuys' on 'System.Data.Entity.DynamicProxies.TBLCustomer_3358322EBD11574120E8EF67BD430B248097F32A0BE35A5D013386853C626337'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":" at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)\r\n at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.WebHost.HttpControllerHandler.d__22.MoveNext()","InnerException":{"$id":"3","Message":"An error has occurred.","ExceptionMessage":"The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.","ExceptionType":"System.ObjectDisposedException","StackTrace":" at System.Data.Entity.Core.Objects.ObjectContext.get_Connection()\r\n at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)\r\n at System.Data.Entity.Core.Objects.ObjectQuery`1.Execute(MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Load(MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject)\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.<>c__DisplayClass7`2.b__1(TProxy proxy, TItem item)\r\n at System.Data.Entity.DynamicProxies.TBLCustomer_3358322EBD11574120E8EF67BD430B248097F32A0BE35A5D013386853C626337.get_TBLLogBuys()\r\n at GetTBLLogBuys(Object )\r\n at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)"}}}

کد Get به این صورت هست :

        public IEnumerable<TBLCustomer> GetCustomer()
        {
            using (CRMEntities dbscore = new CRMEntities())
            {
                var cusregister = dbscore.TBLCustomers.Where(p => p.IsRegister == true).ToList();
                return cusregister;
            }
        }

کلاس جدول اطلاعات هم از توی SQL اومده به صورت DataEntity

در صورتی که تابعی که برگشتیش به صورت String  باشه مشکلی نداره مثل این :


        public string GetCustomer(decimal id)
        {

            if (datamodel.TBLCustomers.Where(p => p.Cell == id).Count() == 1)
            {
                var cus = datamodel.TBLCustomers.Select(z => new { z.CustomerID, z.Name, z.Address, z.Cell, z.Age, z.BirthDate }).Where(p => p.Cell == id).ToList();
                return cus[0].ToString();
            }
            else
            {
                return "شماره شما در سیستم موجود می باشد ولی به دلیل مشکلات فنی امکان پاسخگویی وجود ندارد . لطفا با شرکت تماس بگیرید ";
            }

        }

یا حتی تابعی که به صورت عدد باشه مثل این هم مشکلی نداره :

        [HttpGet]
        public int IsCustomer(decimal Cell)
        {
            int count = datamodel.TBLCustomers.Where(p => p.Cell == Cell).Count();
            if (count == 1)
            {
                return datamodel.TBLCustomers.Select(z => new { z.CustomerID, z.Cell }).Where(p => p.Cell == Cell).Single().CustomerID;
            }
            else
            {
                if (count == 0)
                    return 0;
                else
                    return -1;

            }
        }

ظاهرا فقط در مورد توابعی که برگشتیشون به صورت لیست باشه مشکل میخوره

لطفا راهنماییم کنید .

شنبه, 04 خرداد 1398 12:16

با سلام خدمت شما

کد فراخوانی رو قرار بدید .

اررور میگه دیتا رو نمیتونه بخونه

چک کنید داده از سمت دیتابیس برای متد هایی که به صورت لیست برمیگردونن وجود داشته باشه(برمیگرده).

شنبه, 04 خرداد 1398 12:19

سپاسگزارم از پاسختون .

 دیتا کامل از سمت SQL پاسخ داده میشه و زمانی که برنامه رو تریس میکنم دیتا در متغییر var قابل دیدنه ولی زمانی که Return میشه یه این مشکل میخوره

یکشنبه, 05 خرداد 1398 11:54

من بار دوم که این مشکل رو دارم مطرح میکنم و متاسفانه ظاهرا این فقط مشکل منه و کسی به این مسله نخورده . چون همچنان مشکلم حل نشده

یکشنبه, 05 خرداد 1398 12:35

ظاهرا مشکل از دیتابیسه ینی زمانی که یک جدول به جدول دیگه relation میخوره اینجوری میشه . مگه میشه جدولو relation نزد ؟

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید