我需要在RoutData MVC应用程序中通过给定的URL字符串获取ASP.NET。
我已经找到了根据我的HttpContextBase字符串模拟RouteTable.Routes.GetRouteData()并将其传递给路由解析(Uri到路由)线程中的RouteTable.Routes.GetRouteData()方法的方法。
如何模拟HttpContextBase,使用RouteTable.Routes.GetRouteData()__通过URL字符串检索RouteData?或者是否有其他方法可以通过URL检索RouteData?
发布于 2010-08-24 09:00:52
我使用莫克来确定HttpContextBase的哪些成员在GetRouteData()中使用。它们是:
Request.AppRelativeCurrentExecutionFilePath应该使用~返回路径,这正是我所需要的,所以实用程序类可能如下所示:
public static class RouteUtils
{
public static RouteData GetRouteDataByUrl(string url)
{
return RouteTable.Routes.GetRouteData(new RewritedHttpContextBase(url));
}
private class RewritedHttpContextBase : HttpContextBase
{
private readonly HttpRequestBase mockHttpRequestBase;
public RewritedHttpContextBase(string appRelativeUrl)
{
this.mockHttpRequestBase = new MockHttpRequestBase(appRelativeUrl);
}
public override HttpRequestBase Request
{
get
{
return mockHttpRequestBase;
}
}
private class MockHttpRequestBase : HttpRequestBase
{
private readonly string appRelativeUrl;
public MockHttpRequestBase(string appRelativeUrl)
{
this.appRelativeUrl = appRelativeUrl;
}
public override string AppRelativeCurrentExecutionFilePath
{
get { return appRelativeUrl; }
}
public override string PathInfo
{
get { return ""; }
}
}
}
}然后,您可以这样使用它(例如,在~/Error/NotFound上):
var rd = RouteUtils.GetRouteDataByUrl("~/Error/NotFound")它应该返回如下所示的对象:
RouteData.Values
{
controller = "Error",
action = "NotFound"
}发布于 2016-12-15 19:46:53
这适用于我(.NET 4.5,MVC 5):https://average-joe.info/url-to-route-data/
System.Web.Routing.RouteData routeFromUrl =
System.Web.Routing.RouteTable.Routes.GetRouteData(
new HttpContextWrapper(
new HttpContext(
new HttpRequest(null, path, query),
new HttpResponse(new System.IO.StringWriter()))));https://stackoverflow.com/questions/3545432
复制相似问题