1

如何检索路由图模式的某些部分。例如,我的配置文件中有一个路由图模式,我routes.MapRoute("", "Post/{slug}", new { controller = "Post", action = "Index" })想在 global.asax 中捕获 slug 参数。我尝试如下但它返回 null。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
}

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var context = base.Context;
    if (context != null)
    {
        Response.Write(context.Request.RequestContext.RouteData.Values["slug"]);
    }
}
4

2 回答 2

0

我相信当 BeginRequest 事件被触发时 RouteData 尚未解决。您可以改用 EndRequest。

protected void Application_EndRequest(object sender, EventArgs e)
{
    var context = base.Context;
    if (context != null)
    {
        Response.Write(context.Request.RequestContext.RouteData.Values["slug"]);
    }
}

为了确保使用正确的路由并实际提供了 slug 参数,我建议使用Route 调试器

于 2014-05-21T08:24:06.523 回答
0

你可以试试这个:

protected void Application_BeginRequest(object sender, EventArgs e)
{
     var httpContext = ((MvcApplication)sender).Context;
     var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));

     if (currentRouteData.Values["slug"] != null)
     {
         Response.Write(currentRouteData.Values["slug"]);
     }
}
于 2014-05-21T08:47:23.347 回答