如何在 ASP.NET Core 中实现 SEO 友好 URL 而不是默认 URL 模式?

How to Implement SEO friendly URL instead of default URL pattern in ASP.NET Core?

提问人:Prageeth Liyanage 提问时间:5/14/2023 最后编辑:marc_sPrageeth Liyanage 更新时间:5/15/2023 访问量:166

问:

我有一个比较模块,屏幕如下所示:

enter image description here

当用户键入名称时,自动建议弹出窗口和比较将显示在表格中。

现在,当我查看 URL 时,它看起来像这样:

https://localhost:7043/Compare/ResultTwo?compareOne=4&compareTwo=2

ASP.NET Core 自动添加了它。但我想要一个友好的 URL,比如

https://localhost:7043/Compare/nvidia-vs-raiden

Compare 是我的控制器,ResultTwo 是我的操作。

public IActionResult ResultTwo(string compareOne, string compareTwo)
{
    _model.Item1 = Convert.ToInt16(compareOne);
    _model.Item2 = Convert.ToInt16(compareTwo);

    return View(FullPathsOfViews.CompareSpecs, _model);
}

我相信没有必要共享整个代码,因为这只是 ASP.NET Core 的默认行为。代码中没有任何更改。代码的其余部分只有业务逻辑。 也没有改变。Program.cs

如果你想要一个特定的代码片段,请提及,我喜欢分享它。

如何实现这一点?

C# ASP.NET-Core 路由 friendly-url

评论

1赞 David Browne - Microsoft 5/14/2023
是的。无需共享代码。了解 ASP.NET Core 中的路由。learn.microsoft.com/en-us/aspnet/core/fundamentals/......您可以完全控制路由到控制器的 URL。

答:

0赞 Xinran Shen 5/15/2023 #1

您可以创建一个路由模板来匹配此 URL,这是一个工作演示

程序.cs

app.MapControllerRoute(                    
  name: "customCompareRoute",
  pattern: "Compare/{compareOne}-vs-{compareTwo}",
  defaults: new { controller = "Home", action = "ResultTwo" }
);

app.MapControllerRoute(
   name: "default",
   pattern: "{controller=Home}/{action=Index}/{id?}"
);

视图

<form method="get" >
    <input type="text" id="compareOne" name="compareOne" />
    <input type="text" id="compareTwo" name="compareTwo" />
    <button type="button" id="btn" >Compare</button>
</form>

@section Scripts{
   <script>

        document.getElementById('btn').onclick = submit

            function submit() {
                let value1 = document.getElementById('compareOne').value
                let value2 = document.getElementById('compareTwo').value
            window.location.href = `https://localhost:7144/Compare/${value1}-vs-${value2}`
            }

    </script>
}

演示

enter image description here