Возврат данных таблицы AspNetUser из запроса get - PullRequest
0 голосов
/ 30 июня 2018

Я использую Asp.Net Web Api Identity - Индивидуальную учетную запись пользователя. Я возвращаю данные таблицы AspNetUser из веб-API. Примечание: эта таблица сделана самим моим asp.net, а не мной. Но я изменил строку подключения, чтобы сохранить ее в предыдущей базе данных в Sql, и теперь, возвращая данные таблицы, вызывает Internal Server Error.

public AspNetUser Get(string id)
    {
            using (UserDBEntities entities = new UserDBEntities())
            {
                return entities.AspNetUsers.FirstOrDefault(u => u.UserName == id);
            }
    }

И класс для таблицы AspNetUser по умолчанию, как предлагает отдельная учетная запись пользователя.

Если я делаю это, как показано ниже, ошибка все еще сохраняется при обычном запуске, но не во время отладки, то есть когда я пошагово отлаживаю код, он работает с файлом и возвращает правильные данные, но когда я удалите мои контрольные точки и выполните ИЛИ нажмите продолжить во время отладки, вместо того, чтобы идти по шагам, чтобы вернуть оператор, это приводит к ошибке.

AspNetUser data = entities.AspNetUsers.FirstOrDefault(u => u.UserName == id);
return data;

В отличие от этого сценария, возврат без сохранения данных приводит к ошибке во всех случаях (отладка или нет).

Но я не понимаю, почему ?? почему это может так или иначе повлиять?

Тело ответа об ошибке сети: =>

{"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Error getting value from 'AspNetUserClaims' on 'System.Data.Entity.DynamicProxies.AspNetUser_4C1FDBB9E07016D6C527FBA4F5785F2C7FE37C77A86A5D1946B99CFFDE56DB7F'.","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.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.<WriteBufferedResponseContentAsync>d__22.MoveNext()","InnerException":{"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.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item)\r\n   at System.Data.Entity.DynamicProxies.AspNetUser_4C1FDBB9E07016D6C527FBA4F5785F2C7FE37C77A86A5D1946B99CFFDE56DB7F.get_AspNetUserClaims()\r\n   at GetAspNetUserClaims(Object )\r\n   at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)"}}}

Я хочу знать причину этой аномалии, а не какое-либо решение , потому что ее можно решить путем возврата определенного класса, например: =>

            User user = new User();
            AspNetUser data = entities.AspNetUsers.FirstOrDefault(u => u.UserName == id);
            user.reg_username = data.UserName;
            user.reg_email = data.Email;
            return user;
...