我想将控制器的路径捕获为字符串,以便处理每个请求:
[ApiController]
[Route("[controller]")]
public class BackendController : ControllerBase
{
[Route("Backend/{url}")]
public Task<HttpResponseMessage> CatchAll(string url)
{
var requestmessage = HttpContext.Request;
//Do stuff
}
}
我在 asp.net core 2.1 中发现了很多东西,但我没有设法让它与我的解决方案一起工作..
提前致谢
您可以使用往返路由参数语法:
Route Sample
/search/{*page} /search/admin%2Fproducts (the forward slash is encoded)
/search/{**page} /search/admin/products
我正在使用
CatchAll
模板来捕获我的 Echo 示例的所有路线和方法:
[ApiController]
[Route("{**catchAll}")]
public class EchoController : ControllerBase
{
[Route("/{**catchAll}")]
public IActionResult Echo()
{
return Ok();
}
}
有关 Microsoft 文档
的更多信息 [ApiController]
[Route("api/[controller]/[action]/{url}")]
public class BackendController : ControllerBase
{
[HttpGet]
public IActionResult GenericAction(string url)
{
var queryString = HttpContext.Request.QueryString;
return Ok($"url: {url}, queryString: {queryString}");
}
}
上面代码的结果:
网址:https://127.0.0.1:5001/api/backend/GenericAction/product?id=100
回复:
url: product, queryString: ?id=100
网址:https://127.0.0.1:5001/api/backend/GenericAction/company?name=michael
回复:
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}");
}
}
如果你想获取请求的路径,并处理每个请求,可以使用中间件。
这是一个演示:
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();
});
...................
}