我在调试场景时遇到一些问题,并且想测试特定页面路径是否存在。有没有办法验证 Razor 页面是否存在(在调用 RedirectToPage 之前/之后)?
具体场景是尝试从 mvc 控制器中的 Post 方法内部调用
RedirectToPage
,以转到 Razor 页面。然而,它并没有进入页面,而是简单地进入了Get方法(因为页面的相对路径不正确)。
我尝试调用以下代码来查看是否可以在该路径找到该页面:
var user = await _userManager.GetUserAsync(User);
var pageLoader = HttpContext.RequestServices.GetService(typeof(PageLoader)) as PageLoader;
var pad = new PageActionDescriptor();
pad.RelativePath = "/Path/To/Razor/Page";
var page = await pageLoader.LoadAsync(pad);
但这就死掉了,没有任何有用的例外。我搜索了其他方法来查明代码中是否存在页面,但找不到方法。
编辑:理想情况下,我想要这样的伪代码
var isValidPath = ValidateRazorPage("Path/To/Page", "PageAreaGoesHere");
if(isValidPath)
return RedirectToPage("Path/To/Page", new {area= "PageAreaGoesHere"});
else
DoErrorHandlingToFigureOutIssue();
将
IEnumerable<EndpointDataSource>
注入您的页面/服务
private readonly IEnumerable<EndpointDataSource> _endpoints;
public IndexModel(IEnumerable<EndpointDataSource> endpoints)
{
_endpoints = endpoints;
}
然后您可以使用以下代码获取路径:
var eps = _endpoints.SelectMany(es => es.Endpoints).OfType<RouteEndpoint>();
var paths=eps.Select(x=>x.RoutePattern.RawText).ToList();
它在我这边效果很好: