ASP.NET中的路由
我需要在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;
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;
}
}