首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于控制器属性的.net核心路由

基于控制器属性的.net核心路由
EN

Stack Overflow用户
提问于 2018-04-18 12:08:04
回答 3查看 156关注 0票数 0

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

代码语言:javascript
运行
复制
[Route("api/v1/Admin/Keys")]
public class AdminController : Controller
{}

我的Webproject有以下几条路线:

代码语言:javascript
运行
复制
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Admin}/{action=GetAllKeys}/{id?}");
});

错误:

找不到这个本地主页--没有找到关于网址:http://localhost:60907/的网页

当尝试调用控制器上的一个方法时,这个方法也是路由的,我总是得到相同的结果。

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

我做错了什么?

编辑:

方法,在浏览器中调用该方法:

代码语言:javascript
运行
复制
    [HttpGet]
    [Route("GetAllKeys")]
    public async Task<IActionResult> GetAllKeys()
    {
        var data = await _manager.GetAllKeyTypes();

        return Ok(data);

    }

错误:

找不到这个本地主页--没有找到关于网址:http://localhost:60907/的网页

EDIT2:

现在,当移除全局路由并仅使用:

代码语言:javascript
运行
复制
  [HttpGet("GetAllKeys")]

并使用以下url:http://localhost:60907/GetAllKeys

这是可行的,但也不需要。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-18 13:23:41

好吧..。

注意:不修改.net核心中的端口。我在实验我的API和前端项目。试图把他们放在同一个端口上,但是有一个不同的接入点。它像我想的那样工作,即当API运行时,节点服务器就不能在同一个端口上启动。

然而,这在某个地方引起了某种更改,后来当我更改为API上的默认端口时,这些更改从未完全注册过。我检查了launchSettings.json,并对其进行了相应的修改,但这仍然不起作用。

最后的解决方案:从我的个人电脑上删除了这个项目,并从我的回购中得到了它,现在它的工作,它应该与原来的路线设置。

票数 0
EN

Stack Overflow用户

发布于 2018-04-18 12:37:40

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

试试这个:

代码语言:javascript
运行
复制
[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来设置操作的路由,否则它就无法工作。

票数 2
EN

Stack Overflow用户

发布于 2018-04-18 12:32:34

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

属性路由允许为同一操作定义多个路由。你只需要做一些这样的事情:

代码语言:javascript
运行
复制
public class AdminController : Controller
{
   [Route("")]
   [Route("Admin")]
   [Route("Admin/GetAllKeys")]
   [Route("api/v1/Admin/Keys")]
   public IActionResult GetAllKeys()
   { 
      ... 
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49899346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档