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请参见第二个编辑部分