Sta*_*tan 2 c# asp.net asp.net-mvc asp.net-mvc-routing
我想知道是否有可能以某种方式获得控制器之外的路由值?
这就是我尝试过的.我也试过,.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);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现它位于,但是在一个非常奇怪的问题.也许可能有某种LINQ查询来获取它?
的RouteData值值-0-0值0

WebApi拥有自己的嵌套RouteData,这是因为它不使用RouteData类,System.Web而是它自己的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);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |