2016-01-02 4 views
0

Редактировать 3: Я не знаю, что я сделал, чтобы исправить это, но моя проблема исчезла. Я думаю, что самые важные вещи, которые я нашел, и убрать, если у вас есть эта проблема, заключается в том, что в ASP.NET 5 MVC 6 мы должны добавить промежуточное ПО почти для всего, включая страницы ошибок разработчиков, используя app.UseDeveloperExceptionPage(); ... после этого я понял что трассировка стека может ссылаться на другие классы, на которые ссылаются внутри контроллера, такие как репозиторий и объект контекста, в моем случае. Я немного испортил их, но я не помню, чтобы что-то изменилось. Я думаю, что у меня, возможно, была опечатка в конструкторе моего класса репозитория.ASP.NET5 500 Ошибка при использовании шаблона репозитория

Я получаю 500 внутренних ошибок сервера с контроллером, но он отображает статические данные json без конструктора. Я подозреваю, что что-то не так с встроенной инъекцией зависимостей, но я не могу понять это, поскольку во время сборки я не получаю никаких ошибок или предупреждений.

Редактировать: Я вижу абсолютно ничего в браузере при навигации по http://localhost:5000/api/blogpost/. Просто пустая страница. Нет ошибки. Нет, ничего. Используя Postman для отправки HTTP-запроса, я получаю код ошибки 500. Опять же, комментируя конструктор, я вижу {"name":"Cameron"} и получаю код 200 в обоих браузерах и Postman. В VS нет исключений, и ошибок в консоли вывода также нет.

Edit 2: Я нашел промежуточное app.UseDeveloperExceptionPage(); и производит MissingMethodException: No parameterless constructor defined for this object. - Если я конструктор без параметров, она производит: InvalidOperationException: Multiple constructors accepting all given argument types have been found in type 'MyApp.Controllers.BlogPostController'. There should only be one applicable constructor. - Похоже, что-то юродивый происходит с DEP инъекции ASP.NET5 в?

Вот мой контроллер:

using MyApp.Data.Repository; 
using MyApp.Models; 
using Microsoft.AspNet.Mvc; 
using System; 

    namespace MyApp.Controllers 
    { 
     [Route("api/[controller]")] 
     public class BlogPostController : Controller 
     { 
      // If I comment out this var and the constructor this works. 
      private IBlogPostRepository _repository; 

      // If I leave them here, I get a 500 Internal Server Error. 
      // If I set a breakpoint here, it never fires. 
      // If I create a constructor that takes zero args, it never fires. 
      // I do not get any errors. 
      public BlogPostController(IBlogPostRepository repository) 
      { 
       _repository = repository; 
      } 

      [HttpGet] 
      public JsonResult Get() 
      { 
       return Json(new { name = "Cameron" }); 
      } 
     } 
    } 

Вот Startup.cs ConfigureServices:

public void ConfigureServices(IServiceCollection services) 
{ 
    // MVC 6 
    services.AddMvc(); 

    // EntityFramework 7 
    services.AddEntityFramework() 
     .AddSqlServer() 
     .AddDbContext<AppDbContext>(options => 
     { 
      // Will use the last Data:DefaultConnection:ConnectionString 
      // that was loaded from the config files in the constructor. 
      options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); 
     }); 

    // Injections 
    services.AddTransient<AppDbContextSeedData>(); 
    services.AddScoped<IBlogPostRepository, BlogPostRepository>(); 
} 
+0

Какой тип исключения? и какое сообщение? –

+0

@JoelRamosMichaliszen, не исключение. Никакой ошибки. Даже когда я загружаю его в свой браузер, я ничего не вижу. Я вижу ошибку внутреннего сервера 500 при попытке загрузить из Postman. – scrapcode

+1

http://stackoverflow.com/questions/5385714/deploying-website-500-internal-server-error – CodeCaster

ответ

2

У меня была такая же проблема. У моего конструктора не было возможности. Класс был общедоступным, поэтому я добавил «public» перед конструктором, и он сработал!

Так, НЕ РАБОТАЕТ:

public class VisualizationsController : Controller 
{ 
VisualizationsController() {...} 
} 

И ОБРАБОТКА:

public class VisualizationsController : Controller 
{ 
public VisualizationsController() {...} 
} 
1

я наткнулся на ситуацию, когда я добавлял другой контроллер и забыл обновить страницу Startup.cs.

В Startup.cs под ConfigureServices, попробуйте добавить:

services.AddSingleton<ISomeRepository, SomeRepository>(); 
services.AddSingleton<ISomeOtherRepository, SomeOtherRepository>(); 

Предполагая, что вы передаете в ISomeOtherRepository в новом конструкторе контроллера

Смежные вопросы