Я новичок в использовании ASP.NET Core. Хотите создать api с использованием этой новой структуры, но у вас есть некоторые проблемы с запуском при инъекции зависимостей. Это должно быть довольно просто, но, как-то при использовании DI, я получаю внутреннюю ошибку сервера 500 при вызове контроллера из почтальона.Asp core web api контроллер не работает при инъекции службы
Контроллер:
[Route("api/[controller]")]
public class SomethingController : Controller
{
private readonly ISomethingService _somethingService;
public SomethingController(ISomethingService somethingService)
{
_somethingService = somethingService;
}
// GET: api/values
[HttpGet]
public int Get()
{
return _somethingService.status();
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
}
Сервис с интерфейсом
public interface ISomethingService
{
int status();
}
public class SomethingService : ISomethingService
{
SomethingService()
{
}
public int status()
{
var number = 3;
return number;
}
}
класса Startup
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
// Add application services
services.AddTransient<ISomethingService, SomethingService>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc();
}
}
As вы видите, я уже зарегистрировал сервис, так почему он не работает так, как предполагалось?
Кроме того, попытались удалить инжектор из контроллера, тогда контроллер работает нормально.
Возможно, это о добавлении mvc перед сервисом в ConigurationServices? – miechooy
Я бы зарегистрировал его как облачный, не временный, и я зарегистрировал его перед вызовом services.AddMvc, хотя не уверен, что имеет значение –
Не имеет значения, если у меня есть вызов по service.AddMVC, также я получаю такую же ошибку, если это service.AddScoped <> – Mikkel