我试图创建SEO友好的URL的使用.NET 6和剃刀页(不是MVC).从剃刀页面视图:
<a asp-page="/Post" asp-route-id="9">Test Link</a>
我链接到相应的页面处理程序:
[BindProperty]
public PostViewModel? Post { get; set; }
public async Task<IActionResult> OnGetAsync(int id)
{
Post = new PostViewModel();
Post = await _postService.GetPostAsync(id);
return Page();
}
页面处理程序将通过id
参数获取帖子。在页面模型PostViewModel
中,有Category
,Topic
和UrlTitle
的属性。我想使用这些属性来生成一个SEO友好的URL,如:
https:/wwww.mysite.com/post/{id}/{category}/{topic}/{urltitle}
我不确定如何将这些属性值获取到URL?
3条答案
按热度按时间yrdbyhpb1#
试试这个代码:
在Razor页面视图中:
更新
OnGetAsync
方法以接受以下附加路由参数:然后使用
endpoints.MapRazorPages
方法转到Startup
类的Configure
方法:在这里,
pattern
参数指定要匹配的URL模式,defaults
参数指定要用于此路由的默认控制器和操作。您还需要创建一个对应的PostController
和Index
操作来处理请求。fcy6dtqo2#
在您的post页面(
.cshtml
文件)顶部添加:在您的首页页面模型(
.cshtml.cs
文件)中添加:然后在您的主页页面中使用以下命令创建链接:
检查路由模板
rxztt3cl3#
在Asp.net核心Razor页面中,要设置友好URL,我们可以通过.cshtml页面中的
@page
指令覆盖路由模板,如下所示:或者,我们可以像这样配置剃刀页面约定:
第一次命中方法时,只有id存在,然后填充视图模型,但是当第二次命中方法时,只有id,category,topic和urltitle属性被填充,其余的都是空的?
之后,在“索引”页中,可以使用以下超链接访问Get处理程序:
对于category、topic或urltitle参数,如果你想使用textbox编辑它们,你可以使用JavaScript根据参数构建请求url。代码如下:
结果如下:
更新
category、topic和urltitle值存储在数据库中,而不是作为用户输入表单
在这种情况下,您可以修改Post页面代码如下:
Post.cshtml页面:
那么,结果如下:请注意左下角超链接的url。