gpt4 book ai didi

c# - 向 URL 添加文本而不是 int ID

转载 作者:行者123 更新时间:2023-11-30 15:54:30 25 4
gpt4 key购买 nike

目前我们的永久链接不正确并且妨碍搜索,例如https://example.com/en/blogs/19 - 这应该在 URL 中包含 Google 可以在搜索中获取的单词,而不是 int id用于从 Db 中检索。

假设“The Automotive Industry Latest”的一篇文章,如果我们能够编辑包含关键字的链接,Google 将在算法中赋予更多权重。例如:https://example.com/en/blogs/news/The_Automotive_Industry_Latest - 此链接应指向 https://example.com/en/blogs/19

我可以使用以下方法来完成此操作 - 但这是实现此操作的方法吗?

[Route("en/blogs")]
public class BlogController : Controller
{
[HttpGet("{id}")]
[AllowAnonymous]
public IActionResult GetId([FromRoute] int id)
{
var blog = _context.Blogs.Where(b => b.Id == id);

return Json(blog);
}

[HttpGet("{text}")]
[AllowAnonymous]
public IActionResult GetText([FromRoute] string text)
{
var blog = _context.Blogs.Where(b => b.Title.Contains(text));

if(blog != null)
GetId(blog.Id)

return Ok();
}
}

我猜这仍然不会被 Google 索引为文本,所以必须通过 sitemap.xml 完成吗?这一定是一个常见的要求,但我找不到关于它的任何文档。

我知道 IIS URL 重写,但如果可能,我想远离它。

最佳答案

引用 Routing in ASP.NET Core

You can use the * character as a prefix to a route parameter to bind to the rest of the URI - this is called a catch-all parameter. For example, blog/{*slug} would match any URI that started with /blog and had any value following it (which would be assigned to the slug route value). Catch-all parameters can also match the empty string.

引用 Routing to Controller Actions in ASP.NET Core

您可以应用路由约束以确保 id 和 title 不会相互冲突以获得所需的行为。

[Route("en/blogs")]
public class BlogController : Controller {
//Match GET en/blogs/19
//Match GET en/blogs/19/the-automotive-industry-latest
[HttpGet("{id:long}/{*slug?}", Name = "blogs_endpoint")]
[AllowAnonymous]
public IActionResult GetBlog(long id, string slug = null) {
var blog = _context.Blogs.FirstOrDefault(b => b.Id == id);

if(blog == null)
return NotFound();

//TODO: verify title and redirect if they do not match
if(!string.Equals(blog.slug, slug, StringComparison.InvariantCultureIgnoreCase)) {
slug = blog.slug; //reset the correct slug/title
return RedirectToRoute("blogs_endpoint", new { id = id, slug = slug });
}

return Json(blog);
}
}

这遵循与 StackOverflow 对其链接所做的类似的模式

questions/50425902/add-text-to-urls-instead-of-int-id

现在您的链接可以包含搜索友好词,这应该有助于链接到所需的文章

GET en/blogs/19
GET en/blogs/19/The-Automotive-Industry-Latest.

我建议在将博客保存到数据库时,根据博客标题将 slug 生成为字段/属性,确保清除标题派生的 slug 中的任何无效 URL 字符。

关于c# - 向 URL 添加文本而不是 int ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com