Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.Net Core 3.1 Web Api捕获所有控制器子例程http请求_Http_Asp.net Core_Controller_Asp.net Core 3.1_Catch All - Fatal编程技术网

Asp.Net Core 3.1 Web Api捕获所有控制器子例程http请求

Asp.Net Core 3.1 Web Api捕获所有控制器子例程http请求,http,asp.net-core,controller,asp.net-core-3.1,catch-all,Http,Asp.net Core,Controller,Asp.net Core 3.1,Catch All,我希望以字符串形式捕获控制器的路径,以便处理每个请求: [ApiController] [Route("[controller]")] public class BackendController : ControllerBase { [Route("Backend/{url}")] public Task<HttpResponseMessage

我希望以字符串形式捕获控制器的路径,以便处理每个请求:

     [ApiController]
        [Route("[controller]")]
        public class BackendController : ControllerBase
        {
            [Route("Backend/{url}")]
            public Task<HttpResponseMessage> CatchAll(string url)
            {
     var requestmessage = HttpContext.Request;
//Do stuff
            }
    }
[ApiController]
[路线(“[控制器]”)]
公共类后端控制器:ControllerBase
{
[路由(“后端/{url}”)]
公共任务CatchAll(字符串url)
{
var requestmessage=HttpContext.Request;
//做事
}
}
我在asp.net core 2.1中发现了很多东西,但我的解决方案无法使其正常工作


提前感谢

如果您想获得请求路径,并处理每个请求,您可以使用中间件

下面是一个演示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.Use(async (context, next) =>
            {
                //get path
                var path = context.Request.Path.ToString();
                //when path == what you want,do something
                if (path == "xxxx")
                {
                    //do something
                }
                await next();
            });
            ...................
        }

如果您想获得请求的路径,并处理每个请求,可以使用中间件

下面是一个演示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.Use(async (context, next) =>
            {
                //get path
                var path = context.Request.Path.ToString();
                //when path == what you want,do something
                if (path == "xxxx")
                {
                    //do something
                }
                await next();
            });
            ...................
        }
上述代码的结果:

网址:

响应:url:product,查询字符串:?id=100

网址:

回复:url:company,queryString:?name=michael

#编辑

如果要将所有http操作添加到一个

        [HttpGet]
        [HttpPost]
        [HttpPut]
        [HttpDelete]
        public IActionResult GenericAction(string url)
        {
            var queryString = HttpContext.Request.QueryString;
            return Ok($"url: {url}, queryString: {queryString}");
        }
#编辑

没有动作名称

    [ApiController]
    public class BackendController : ControllerBase
    {
        [HttpGet]
        [HttpPost]
        [HttpPut]
        [HttpDelete]
        [Route("api/backend/{url}")]
        public IActionResult Get(string url)
        {
            var queryString = HttpContext.Request.QueryString;
            return Ok($"url: {url}, queryString: {queryString}");
        }
    }
上述代码的结果:

网址:

响应:url:product,查询字符串:?id=100

网址:

回复:url:company,queryString:?name=michael

#编辑

如果要将所有http操作添加到一个

        [HttpGet]
        [HttpPost]
        [HttpPut]
        [HttpDelete]
        public IActionResult GenericAction(string url)
        {
            var queryString = HttpContext.Request.QueryString;
            return Ok($"url: {url}, queryString: {queryString}");
        }
#编辑

没有动作名称

    [ApiController]
    public class BackendController : ControllerBase
    {
        [HttpGet]
        [HttpPost]
        [HttpPut]
        [HttpDelete]
        [Route("api/backend/{url}")]
        public IActionResult Get(string url)
        {
            var queryString = HttpContext.Request.QueryString;
            return Ok($"url: {url}, queryString: {queryString}");
        }
    }

感谢您的回答,但是是否可以将每个Http操作重新组合在一个Http操作中?如果我遵循这一点,我将为每个操作创建一个方法,它们将执行基本相同的操作(代理)参见编辑部分@rihen谢谢你的回答,我最不想做的事情是直接访问“后端”之后的路由。localhost/Backend/{Url}没有任何特定的action@Rihen请参阅第二个编辑部分谢谢您的回答,但是是否可以将每个Http操作重新组合在一个中?如果我遵循这一点,我将为每个操作创建一个方法,它们将执行基本相同的操作(代理)参见编辑部分@rihen谢谢你的回答,我最不想做的事情是直接访问“后端”之后的路由。localhost/Backend/{Url}没有任何特定的action@Rihen请参见第二个编辑部分