Ошибка при получении данных из контроллера ASP.NET Web API2
Всем привет использую ASP.NET Web Api с типом аутентификации Individual User Accounts при отправки данных клиенту полученных из БД, я на клиенте получаю код статуса 500 при этом исключений на сервере не наблюдалось. Есть что-то что блокирует?
public async Task<HttpResponseMessage> GetCard(string data)
{
string[] data2 = JsonConvert.DeserializeObject<string[]>(data);
if (!ModelState.IsValid)
{
return Request.CreateResponse(BadRequest(ModelState));
}
if (User.IsInRole("Administrator"))
{
IEnumerable<WorkerCard> card = new CorpDb().WorkerCards.ToList();
return Request.CreateResponse(HttpStatusCode.OK,card);
}
return Request.CreateResponse(Unauthorized());
}
Ответы (1 шт):
Проблема решена! @S.H. Спасибо что направили куда посмотреть Тут решение. Проблема была в сереализации формата json либо в десереализации, на стороне сервера по этому и возваращало Status Code 500 у клиента. Чтоб эту проблему решить есть два варианта для одного контекста и для множества контекстов. Опять же повторюсь я использовал ASP.NET Web Api с типом аутентификации Individual User Accounts.
Если у вас один контекст (DbContext)
Затем в файле Global.asax в методе Application_Start() Добавляем строку
JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
Будет выглядеть таким образом метод
protected async void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
}
Если же у вас несколько контекстов То в каждом контексте нужно внести две строчки
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
После этого должно выглядеть таким образом
public class ApplicationDbContext: IdentityDbContext<ApplicationUser>
{
public DbSet<Shop> Shops { get; set; }
public DbSet<Detail> Details { get; set; }
public ApplicationDbContext() : base("DefaultConnection")
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
public class ModelContext2: DbContext
{
public DbSet<User> Users{ get; set; }
public DbSet<Profile> Profiles{ get; set; }
public ModelContext2() : base("DefaultConnection")
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
