找不到C#netcore控制器

时间:2018-06-07 17:28:43

标签: c# asp.net-core identityserver4 asp.net-core-webapi

我在现有的IdentityServer4项目中添加了一个netcore控制器。这是我的代码

col0
4.0     0.8
7.0     0.4
8.0     1.2
11.0    1.5
15.0    0.1
19.0    0.5
Name: col1, dtype: float64

我在startup.cs中也有以下代码行

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();
    }
 }
}

我可以通过以下网址访问帐户控制器

app.UseMvcWithDefaultRoute();

但是,我无法通过以下网址访问版本控制器:

http://localhost:5001/account/login

错误代码为404.

有什么问题?

1 个答案:

答案 0 :(得分:1)

您缺少控制器的路由前缀。您正在使用属性路由,因此您需要包含整个所需的路由。

当前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已经有了提供这些结果的辅助方法。

参考Routing to controller actions in ASP.NET Core