Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET中的路由_Asp.net_Routing - Fatal编程技术网

ASP.NET中的路由

ASP.NET中的路由,asp.net,routing,Asp.net,Routing,我需要在ASP.NET应用程序中使用带参数的路由 public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { RegisterRoutes(); } private void RegisterRoutes() { var routes = RouteTable.Routes;

我需要在ASP.NET应用程序中使用带参数的路由

public class Global : System.Web.HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        var routes = RouteTable.Routes;

        routes.MapPageRoute(
            "Profile",
            String.Format("{0}/{{{1}}}/", "Profile", "Id"),
            "~/Views/Account/Profile.aspx",
            false,
            new RouteValueDictionary {{"Id", null}});
    }
}
然后,通过导航到“/Profile”我想使用页面加载方法请求.Params[“Id”]作为null,通过导航到“/Profile/1”,请求.Params[“Id”]作为“1”


我哪里出错了?

使用传统的WebForms,我在RegisterRoutes()方法中创建了两个路由

CustomRouteHandler看起来像这样:

public class CustomRouteHandler : IRouteHandler
{
  public CustomRouteHandler(string virtualPath)    
  {        
      this.VirtualPath = virtualPath;    
  }    
  public string VirtualPath { get; private set; }   

  public IHttpHandler GetHttpHandler(RequestContext requestContext)    
  {        
      string queryString = "";
      HttpRequest request = HttpContext.Current.Request;

      string id = Convert.ToString(requestContext.RouteData.Values["id"]);
      if (id.Length > 0)
      {
          queryString = "?id=" + id;
      }
      HttpContext.Current.RewritePath(          
        string.Concat(          
        VirtualPath,          
        queryString));         
      var page = BuildManager.CreateInstanceFromVirtualPath             
        (VirtualPath, typeof(Page)) as IHttpHandler;        
      return page;    
  }
}

使用ASP.NET url路由可以实现这一点。下面是一个示例

您是在ASP.NET WebForms还是MVC中使用路由?我假设WebForms是因为您提到了Page_Load方法,但只是想检查一下。
public class CustomRouteHandler : IRouteHandler
{
  public CustomRouteHandler(string virtualPath)    
  {        
      this.VirtualPath = virtualPath;    
  }    
  public string VirtualPath { get; private set; }   

  public IHttpHandler GetHttpHandler(RequestContext requestContext)    
  {        
      string queryString = "";
      HttpRequest request = HttpContext.Current.Request;

      string id = Convert.ToString(requestContext.RouteData.Values["id"]);
      if (id.Length > 0)
      {
          queryString = "?id=" + id;
      }
      HttpContext.Current.RewritePath(          
        string.Concat(          
        VirtualPath,          
        queryString));         
      var page = BuildManager.CreateInstanceFromVirtualPath             
        (VirtualPath, typeof(Page)) as IHttpHandler;        
      return page;    
  }
}