C# .net核心路由通过控制器属性
我有一个获取路由属性的控制器:C# .net核心路由通过控制器属性,c#,api,asp.net-core,request,C#,Api,Asp.net Core,Request,我有一个获取路由属性的控制器: [Route("api/v1/Admin/Keys")] public class AdminController : Controller {} My Webproject具有以下路径: app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Admin}/{action=GetAllKeys}/{id?}");
[Route("api/v1/Admin/Keys")]
public class AdminController : Controller
{}
My Webproject具有以下路径:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Admin}/{action=GetAllKeys}/{id?}");
});
错误:
找不到此本地主机页找不到该网站的网页
地址:
当尝试去调用控制器上的方法时,我也会得到同样的结果
如果我从控制器中删除route属性,那么这将开始工作,但我没有获得所需的路由
我做错了什么
编辑:
我正在浏览器中调用的方法:
[HttpGet]
[Route("GetAllKeys")]
public async Task<IActionResult> GetAllKeys()
{
var data = await _manager.GetAllKeyTypes();
return Ok(data);
}
并使用以下url:
这是可行的,但同样没有设计约定路由不用于具有属性路由配置的控制器/操作 属性路由允许为同一操作定义多个路由。你可以简单地做这样的事情:
public class AdminController : Controller
{
[Route("")]
[Route("Admin")]
[Route("Admin/GetAllKeys")]
[Route("api/v1/Admin/Keys")]
public IActionResult GetAllKeys()
{
...
}
}
约定路由不用于具有属性路由配置的控制器/操作 属性路由允许为同一操作定义多个路由。你可以简单地做这样的事情:
public class AdminController : Controller
{
[Route("")]
[Route("Admin")]
[Route("Admin/GetAllKeys")]
[Route("api/v1/Admin/Keys")]
public IActionResult GetAllKeys()
{
...
}
}
如果只有
[路由(“api/v1/Admin/Keys”)]
应用于控制器,则必须使用/api/v1/Admin/Keys/GetAllKeys
访问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);
}
}
[路由(“api/v1/Admin/Keys”)]
公共类AdminController:Controller{
[HttpGet(“GetAllKeys”)]
公共异步任务GetAllKeys()
{
var data=await_manager.GetAllKeyTypes();
返回Ok(数据);
}
}
这说明AdminController
中的每个操作都在/api/v1/Admin/Keys
下。然后HttpGet
属性告诉它应该通过/api/v1/Admin/Keys/GetAllKeys
提供GetAllKeys
一旦您在控制器上设置了
Route
,您似乎必须使用HttpGet
在操作上设置路由,否则它就不起作用了。如果您只有[Route(“api/v1/Admin/Keys”)]
应用于控制器,然后您必须使用/api/v1/Admin/Keys/GetAllKeys
访问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);
}
}
[路由(“api/v1/Admin/Keys”)]
公共类AdminController:Controller{
[HttpGet(“GetAllKeys”)]
公共异步任务GetAllKeys()
{
var data=await_manager.GetAllKeyTypes();
返回Ok(数据);
}
}
这说明AdminController
中的每个操作都在/api/v1/Admin/Keys
下。然后HttpGet
属性告诉它应该通过/api/v1/Admin/Keys/GetAllKeys
提供GetAllKeys
一旦您在控制器上设置了Route
,您似乎必须使用HttpGet
在操作上设置路由,否则它就无法工作。好吧
请注意,不要修改.net core中的端口。
我正在试验我的API和前端项目。
试图将它们放在同一端口上,但使用不同的访问点。
它按照我的想法工作,即当API运行时,节点服务器不能在同一端口上启动
然而,这在某个地方引起了某种变化,后来当我更改回API上的默认端口时,它从未完全注册。
我检查了launchSettings.json并对其进行了相应的修改,但仍然不起作用
最终解决方案:
从我的pc上删除了该项目,并从我的回购中取回了它,现在它与原始路线集一样正常工作 好吧
请注意,不要修改.net core中的端口。
我正在试验我的API和前端项目。
试图将它们放在同一端口上,但使用不同的访问点。
它按照我的想法工作,即当API运行时,节点服务器不能在同一端口上启动
然而,这在某个地方引起了某种变化,后来当我更改回API上的默认端口时,它从未完全注册。
我检查了launchSettings.json并对其进行了相应的修改,但仍然不起作用
最终解决方案:
从我的pc上删除了该项目,并从我的回购中取回了它,现在它与原始路线集一样正常工作 实际上/api/v1/Admin/Keys/GetAllKeys正是我想要的,但我不明白为什么它不起作用。url是“”,但我正在获取:“找不到此本地主机页”@ThunD3eR您需要调用[..]/GetAllKeys,而不是[..]/AllKeys我已更新了答案。使用
HttpGet
属性,而不是route
设置操作的路由。抱歉,图像有点模糊。我正在调用GetAllKeys我在我的一个应用程序中测试了这个。但请注意,在我的Startup.cs中,我有app.UseMvc()
(无参数)。实际上/api/v1/Admin/Keys/GetAllKeys正是我想要的,但我无法理解它为什么不工作。url是“”,但我正在获取:“找不到此本地主机页”@ThunD3eR您需要调用[..]/GetAllKeys,而不是[..]/AllKeys我已更新了答案。使用HttpGet
属性,而不是route
设置操作的路由。抱歉,图像有点模糊。我正在调用GetAllKeys我在我的一个应用程序中测试了这个。但请注意,在我的Startup.cs中,我有app.UseMvc()
(无参数)。听起来不错。两个应用程序不能绑定到同一个TCP端口。如果希望它们在同一端口下工作,则必须使用web服务器(如IIS)作为代理,以便域的根将请求转发到前端,并将/api
转发到api应用程序。听起来不错。两个应用程序不能绑定到同一个TCP端口。如果希望它们在同一端口下工作,则必须使用web服务器(如IIS)作为代理,以便域的根将请求转发给fro