Зачем получать 500 на моей новой конечной точке .NET Core 2.0 WebApi при использовании DI? - PullRequest
0 голосов
/ 25 апреля 2019

Я установил новый контроллер , и когда я вызываю конечную точку (с чванством), я всегда получаю 500 .Чтобы проверить, что это не о неправильном коде, я установил только строку return Ok («полученный»);Когда я извлекаю инъекцию зависимостей (DI) из конструктора контроллера, тогда я получаю 200. Может ли какой-то орган иметь представление о том, что может вызвать проблему и что может быть решением?

    [Produces("application/json")]
[Route("api/v1/dataPicker/startProcess")]
public class StartProcessController : Controller
{
    private IStartProcessBusinessComponent BusinessComponent { get; }

    public StartProcessController(IStartProcessBusinessComponent startProcessBusinessComponent)
    {
        BusinessComponent = startProcessBusinessComponent;
    }

    [HttpPost()]
    public async Task<IActionResult> SetProcessStart([FromBody]StartProcessWrapper startProcessWrapper)
    {
        return Ok("received");
    }
}



public interface IStartProcessBusinessComponent
{
    Task SetProcessStartAsync(StartProcessWrapper startProcessWrapper);
}


class StartProcessBusinessComponent : IStartProcessBusinessComponent
{
    public StartProcessBusinessComponent( ) {}

    public async Task SetProcessStartAsync(StartProcessWrapper startProcessWrapper) { }
}

Когда я снимаю DI, мне возвращают 200.Но мне нужен DI.

    [Produces("application/json")]
[Route("api/v1/dataPicker/startProcess")]
public class StartProcessController : Controller
{
    private IStartProcessBusinessComponent BusinessComponent { get; }

    public StartProcessController( ) { }

    [HttpPost()]
    public async Task<IActionResult> SetProcessStart([FromBody]StartProcessWrapper startProcessWrapper)
    {
        return Ok("received");
    }
}

1 Ответ

1 голос
/ 25 апреля 2019

Несколько вещей, которые нужно исправить

  1. Вместо [FromBody] используйте [FromServices] для получения компонента из DI
  2. Объявите в DI StartProcessBusinessComponent как IStartProcessBusinessComponent, используя, например, services.AddTransient<IStartProcessBusinessComponent, StartProcessBusinessComponent>();

И это должно работать

...