Max*_*Max 7 asp.net-core-mvc asp.net-core asp.net-core-tag-helpers
ASP.NET Core 的标签助手似乎不能与DynamicRouteValueTransformer结合使用。
这是一个 MCVE:假设我们有一个带有两个动作的简单控制器......
public class GenericController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Add()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
... 以及带有标签助手Index的Add操作的视图链接asp-action:
<!DOCTYPE html>
<html>
<body>
<a asp-action="Add">Add new!</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我们现在/Generic在浏览器中打开并检查页面时,我们会注意到 ASP.NEThref为控制器操作生成了预期值:
<a href="/Generic/Add">Add new!</a>
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。现在让我们创建一个DynamicRouteValueTransformer将所有请求路由到同一个控制器的...
public class Transformer : DynamicRouteValueTransformer
{
public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
if (values.ContainsKey("controller"))
{
values["originalController"] = values["controller"];
values["controller"] = "Generic";
}
return new ValueTask<RouteValueDictionary>(values);
}
}
Run Code Online (Sandbox Code Playgroud)
...让我们为端点路由设置它Startup.cs...
services.AddSingleton<Transformer>();
...
app.UseEndpoints(endpoints =>
{
endpoints.MapDynamicControllerRoute<Transformer>("{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
在浏览器中打开/Generic(或任何其他路由,例如/Foobar)并检查页面后,我们现在会注意到asp-action标签助手不再工作:
<a href="">Add new!</a>
Run Code Online (Sandbox Code Playgroud)
由于 href 值为空,因此链接不再有效。看起来动态路由破坏了标签助手。
任何建议的修复或解决方法?
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |