Ser*_* S. 29 url asp.net-mvc routing url-routing asp.net-mvc-routing
我需要RoutData通过ASP.NET MVC应用程序中的给定URL字符串来获取.
我找到了HttpContextBase基于URL字符串模拟的RouteTable.Routes.GetRouteData()方法,然后将其传递给Route Parsing(Uri to Route)线程中的方法.
如何使用URL字符串模拟HttpContextBase检索?RouteDataRouteTable.Routes.GetRouteData()
或者是否有另一种RouteData通过URL 检索的方法?
Ser*_* S. 40
我使用Moq来确定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 ""; }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
例如,如果传递〜/ Error/NotFound,则~/Error/NotFound返回类似的内容
var rd = RouteUtils.GetRouteDataByUrl("~/Error/NotFound")
Run Code Online (Sandbox Code Playgroud)
也许这对任何人都有帮助.
小智 7
这适用于我(.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()))));
Run Code Online (Sandbox Code Playgroud)