我想知道是否有可能以某种方式获取控制器外部的路由值?
这是我尝试过的。我也尝试过做.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-值-值-0-0-值-0
WebApi 有它自己的嵌套 RouteData,这是因为它不使用RouteData
上课于System.Web
但它是自己的HttpRouteData
class.
Web Api 路由在 key 下添加一个条目MS_SubRoutes
,Web Api 将其用于其内部路由。
我编写了一个扩展方法,它将 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);
}
}
Usage:
[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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)