не может найти контроллер C # netcore - PullRequest
0 голосов
/ 07 июня 2018

Я добавил контроллер netcore в свой существующий проект IdentityServer4.Вот мой код

namespace IdentityServer4.Quickstart.UI
{
  public class VersionController : Controller
  {
    IVersionService _repository;
    public VersionController(IVersionService repository)
    {
        _repository = repository;
    }
    [HttpGet(nameof(GetBackgroundId))]
    public IActionResult GetBackgroundId()
    {
        return new OkObjectResult(_repository.GetBackgroundId());
    }
    [HttpPut(nameof(SetBackgroundId))]
    public IActionResult SetBackgroundId([FromQuery]int id)
    {
        _repository.SetBackgroundId(id);
        return new NoContentResult();
    }
 }
}

У меня также есть следующая строка кода в startup.cs

app.UseMvcWithDefaultRoute();

Я могу получить доступ к контроллеру учетной записи по следующему URL

http://localhost:5001/account/login

Однако я не могу получить доступ к контроллеру версий по следующему URL:

http://localhost:5001/version/GetBackgroundId

Код ошибки 404.

Что не так?

1 Ответ

0 голосов
/ 07 июня 2018

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

Текущее действие контроллера GetBackgroundId будет соответствовать

http://localhost:5001/GetBackgroundId

Добавить маршрут к контроллеру

[Route("[controller]")]
public class VersionController : Controller {
    IVersionService _repository;
    public VersionController(IVersionService repository) {
        _repository = repository;
    }

    //Match GET version/GetBackgroundId
    [HttpGet("[action]")]
    public IActionResult GetBackgroundId() {
        return Ok(_repository.GetBackgroundId());
    }

    //Match PUT version/SetBackgroundId?id=5
    [HttpPut("[action]")]
    public IActionResult SetBackgroundId([FromQuery]int id) {
        _repository.SetBackgroundId(id);
        return NoContent();
    }
 }

Также обратите внимание на использование маркеров маршрута и то, что вместо обновления ответов у Controller уже есть вспомогательные методы, которые предоставляют эти результаты.

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core

...