首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能在控制器之外的运行时获取路由数据?

是否有可能在控制器之外的运行时获取路由数据?
EN

Stack Overflow用户
提问于 2014-07-09 23:02:44
回答 2查看 5K关注 0票数 2

我想知道是否有可能以某种方式获得控制器之外的路由值?

这就是我试过的。我也试着做.Values["{projectId}"];,但是我还是得到了null

代码语言:javascript
运行
复制
[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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-10 05:50:08

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

WebApi路由在密钥MS_SubRoutes下添加了一个条目,WebApi用于其内部路由。

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

WebApiExtensions.cs

代码语言:javascript
运行
复制
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);
    }
}

使用:

代码语言:javascript
运行
复制
[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);
    }
}
票数 10
EN

Stack Overflow用户

发布于 2015-05-22 17:24:34

注意此修复中使用的键不正确,在MS_DirectRouteMatches. 4.5中的“当前”键是.net

routeData.Values"MS_SubRoutes“应该是routeData.Values"MS_DirectRouteMatches")。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24665016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档