是否有一种方法可以从控制器上定义的路由获取值,而无需将参数添加到所有http方法中?
就是我想做的事的例子。
calling localhost/api/test/client[Route("api/{somevar}/[controller]")]
[ApiController]
public class ClientController : ControllerBase
{
private readonly MainContext fContext;
private string fSomeVar;
public ClientController(MainContext pContext)
{
fContext = pContext;
fSomeVar = somevar; <-- Is there a way to get "test" from the route?
}
// GET: api/Client
[HttpGet]
public async Task<ActionResult<IEnumerable<ClientDH>>> GetClients()
{
// use fSomeVar here.
}
// GET: api/Client
[HttpGet]
public async Task<ActionResult<IEnumerable<ClientDH>>> GetClients(string somevar)
{
// this works but I'm trying to avoid changing all the methods in all controllers.
}
}发布于 2022-01-14 06:26:48
我的建议如下:
1.您可以使用IHttpContextAccessor从http请求获取路由值,代码如下:
public DemoController(IHttpContextAccessor httpContextAccessor)
{
fSomeVar = httpContextAccessor.HttpContext.Request.RouteValues["somevar"].ToString();
}在startup.cs中,您需要配置:
services.AddHttpContextAccessor();2.演示:
[Route("api/{somevar}/[controller]")]
[ApiController]
public class DemoController : ControllerBase
{
private string fSomeVar;
public DemoController(IHttpContextAccessor httpContextAccessor)
{
fSomeVar = httpContextAccessor.HttpContext.Request.RouteValues["somevar"].ToString();
}
[HttpGet]
public async Task<IActionResult> Demo1()
{
try
{
return Ok("Id: " + fSomeVar);
}
catch
{
return BadRequest();
}
}
[HttpGet("demo2/{id1}/{id2}")]
public async Task<IActionResult> Demo2(string id1, int id2)
{
try
{
return Ok("Id1: " + id1 + ", Id2: " + id2+ ", Id3: " + fSomeVar);
}
catch
{
return BadRequest();
}
}
}结果:

https://stackoverflow.com/questions/70684670
复制相似问题