.net核心路由通过controller属性

时间:2018-04-18 12:08:05

标签: c# api asp.net-core request

我有一个获取路由属性的控制器:

[Route("api/v1/Admin/Keys")]
public class AdminController : Controller
{}

我的Webproject有以下路线:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Admin}/{action=GetAllKeys}/{id?}");
});

错误:

  

找不到此本地主页页面未找到网页的网页   地址:http://localhost:60907/

当试图在控制器上调用一个也被路由的方法时,我会保持不变。

如果我从控制器中删除路由属性,那么这开始工作但我没有得到所需的路由。

我做错了什么?

编辑:

我在浏览器中调用的方法:

    [HttpGet]
    [Route("GetAllKeys")]
    public async Task<IActionResult> GetAllKeys()
    {
        var data = await _manager.GetAllKeyTypes();

        return Ok(data);

    }

错误:

  

找不到此本地主页页面未找到网页的网页   地址:http://localhost:60907/

EDIT2:

现在删除全局路径时只使用:

  [HttpGet("GetAllKeys")]

使用以下网址: http://localhost:60907/GetAllKeys

这种方法有效,但又没有出现

3 个答案:

答案 0 :(得分:2)

如果您只将[Route("api/v1/Admin/Keys")]应用于控制器,则必须使用GetAllKeys访问/api/v1/Admin/Keys/GetAllKeys操作。我不认为这就是你想要的。

试试这个:

[Route("api/v1/Admin/Keys")]
public class AdminController : Controller {

    [HttpGet("GetAllKeys")]
    public async Task<IActionResult> GetAllKeys()
    {
        var data = await _manager.GetAllKeyTypes();

        return Ok(data);

    }    
}

这表明AdminController中的所有操作都在/api/v1/Admin/Keys之下。然后HttpGet属性告诉它GetAllKeys应该可以通过/api/v1/Admin/Keys/GetAllKeys使用。

在控制器上设置Route后,您似乎必须使用HttpGet为操作设置路线,否则它无法正常工作。

答案 1 :(得分:1)

约定路由不用于具有属性路由配置的控制器/操作。

属性路由允许为同一操作定义多个路由。你可以这样做:

public class AdminController : Controller
{
   [Route("")]
   [Route("Admin")]
   [Route("Admin/GetAllKeys")]
   [Route("api/v1/Admin/Keys")]
   public IActionResult GetAllKeys()
   { 
      ... 
   }
}

答案 2 :(得分:0)

...好的

自我注意...... 修改.net核心中的端口。 我正在试验我的API和我的前端项目。 试图将它们放在同一个端口上但具有不同的接入点。 它按照我的想法运行,当API运行时,节点服务器无法在同一端口上启动。

然而,这在某处引起了某种变化,后来当我更改回API上的默认端口时从未完全注册。 我检查了launchSettings.json并相应地对其进行了修改,但仍然没有用。

最终解决方案: 从我的电脑中删除了该项目,并从我的回购中恢复,现在它的工作原理应该与原始路由设置。