Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net核心路由通过控制器属性_C#_Api_Asp.net Core_Request - Fatal编程技术网

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