通过 DynamicRouteValueTransformer 的 Razor 页面路由总是 returns 404
Razor Page routing via DynamicRouteValueTransformer always returns 404
我在 ASPNET Core 5 Razor Pages 应用程序中使用自定义动态路由转换器。我的 TransformAsync 覆盖按预期调用,并且 returns 到页面的自定义路由,但该页面从未加载,并且请求始终 returns 404。Razor 页面都找不到我正在访问的页面路由到,或者它只是忽略了我的自定义路由。
这是一个简单的测试用例。非常感谢任何关于可能出错的提示,或者我如何解决问题![=15=]
在 Startup.Configure(..) 我有
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapDynamicControllerRoute<LaunchPageTransformer>("{**id}");
});
我的 LaunchPageTransformer:DynamicRouteValueTransformer 实现:
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
return await Task.Run(() =>
{
return new RouteValueDictionary()
{
{ "page", "Test" },
{ "id", "123" }
};
});
}
在 Pages/Test.cshtml 我有
@page "{id}"
@model Launch.Pages.TestModel
@{
}
并在 Pages/Test.cshtml.cs:
public class TestModel : PageModel
{
public void OnGet(int? id)
{
}
}
我正在导航到 localhost:44351/123,它成功地选择了我的变压器,但对结果没有任何影响。
您的代码中有两处错误。首先 MapDynamicControllerRoute
用于选择控制器操作,而不是用于选择页面处理程序。你需要使用的是MapDynamicPageRoute
。其次,page
route key 的值应该是以/
开头的路径。因此,您需要 "/Test"
.
而不是 "Test"
这是您需要的最终代码(替换您的代码):
endpoints.MapDynamicPageRoute<LaunchPageTransformer>("{**id}");
在您的实施中 LaunchPageTransformer
:
return new RouteValueDictionary()
{
//we need to use a / to prefix the page name here
{ "page", "/Test" },
{ "id", "123" }
};
我在 ASPNET Core 5 Razor Pages 应用程序中使用自定义动态路由转换器。我的 TransformAsync 覆盖按预期调用,并且 returns 到页面的自定义路由,但该页面从未加载,并且请求始终 returns 404。Razor 页面都找不到我正在访问的页面路由到,或者它只是忽略了我的自定义路由。
这是一个简单的测试用例。非常感谢任何关于可能出错的提示,或者我如何解决问题![=15=]
在 Startup.Configure(..) 我有
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapDynamicControllerRoute<LaunchPageTransformer>("{**id}");
});
我的 LaunchPageTransformer:DynamicRouteValueTransformer 实现:
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
return await Task.Run(() =>
{
return new RouteValueDictionary()
{
{ "page", "Test" },
{ "id", "123" }
};
});
}
在 Pages/Test.cshtml 我有
@page "{id}"
@model Launch.Pages.TestModel
@{
}
并在 Pages/Test.cshtml.cs:
public class TestModel : PageModel
{
public void OnGet(int? id)
{
}
}
我正在导航到 localhost:44351/123,它成功地选择了我的变压器,但对结果没有任何影响。
您的代码中有两处错误。首先 MapDynamicControllerRoute
用于选择控制器操作,而不是用于选择页面处理程序。你需要使用的是MapDynamicPageRoute
。其次,page
route key 的值应该是以/
开头的路径。因此,您需要 "/Test"
.
"Test"
这是您需要的最终代码(替换您的代码):
endpoints.MapDynamicPageRoute<LaunchPageTransformer>("{**id}");
在您的实施中 LaunchPageTransformer
:
return new RouteValueDictionary()
{
//we need to use a / to prefix the page name here
{ "page", "/Test" },
{ "id", "123" }
};