我有一个获取路由属性的控制器:
[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
这种方法有效,但又没有出现
答案 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并相应地对其进行了修改,但仍然没有用。
最终解决方案: 从我的电脑中删除了该项目,并从我的回购中恢复,现在它的工作原理应该与原始路由设置。