gpt4 book ai didi

c# - 是否可以在 Controller 外部的运行时获取路由数据?

转载 作者:行者123 更新时间:2023-11-30 19:40:08 25 4
gpt4 key购买 nike

我想知道是否有可能以某种方式在 Controller 之外获取路由值?

这是我试过的。我也尝试执行 .Values["{projectId}"]; 但我仍然得到 null

[RoutePrefix("projects")]
public class UsergroupController : ApiController
{
[Route("{projectId}/usergroups"), HttpGet]
public IHttpActionResult Get()
{
// Url: /projects/123/usergroups
// Response: null
var projectId = HttpContext.Current.Request.RequestContext.RouteData.Values["projectId"];
return Ok(projectId);
}
}

我发现它位于,但在一个很奇怪的事情。也许可能有某种 LINQ 查询来获取它?

RouteData-Values-Values-0-0-Values-0

enter image description here

最佳答案

WebApi 有它自己的嵌套 RouteData,这是因为它没有使用 System.Web 中的 RouteData 类,而是它自己的 HttpRouteData类。

WebApi 路由在键 MS_SubRoutes 下添加一个条目,WebApi 将其用于其内部路由。

我编写了一个扩展方法,将 WebApi 路由数据扁平化为 string/object 字典,这就是您可能在 RouteData.Values 中看到的内容

WebApiExtensions.cs

public static class WebApiExtensions
{
public static IDictionary<string, object> GetWebApiRouteData(this RouteData routeData)
{
if (!routeData.Values.ContainsKey("MS_SubRoutes"))
return new Dictionary<string,object>();

return ((IHttpRouteData[])routeData.Values["MS_SubRoutes"]).SelectMany(x => x.Values).ToDictionary(x => x.Key, y => y.Value);
}
}

用法:

[RoutePrefix("projects")]
public class UsergroupController : ApiController
{
[Route("{projectId}/usergroups"), HttpGet]
public IHttpActionResult Get()
{
// Url: /projects/123/usergroups
// Response: null
object value = null;

var webApiRouteData = HttpContext.Current.Request.RequestContext.RouteData.GetWebApiRouteData();
value = webApiRouteData["projectId"];

return Ok(value);
}
}

关于c# - 是否可以在 Controller 外部的运行时获取路由数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com