gpt4 book ai didi

c# - 在操作命中 MVC 后更改 URL?

转载 作者:太空宇宙 更新时间:2023-11-03 11:12:12 25 4
gpt4 key购买 nike

我要改变:

www.testurl.com/sports/blog/1 

体育是我的领域,博客是我的行动,1 是博文的 ID,到:

www.testurl.com/sports/blog/test-title-of-blog

博客仍然是我的操作,但没有显示 id,而是博客的标题/永久链接。

这是我为此操作的 AreaRegistration:

context.MapRoute(
"sports",
"sports/{action}/{content}",
new { area = "Sports", controller = "Sports", action = "", content = "" });

这是我现在的行为:

[HttpGet]
public ActionResult Blog(string content)
{
int contentId;
if (Int32.TryParse(content, out contentId))
{
model = service.GetBlogById(contentId);
}
else
{
model = service.GetBlogByTitle(content);
}

//Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
return View(model);
}

用户可以通过博客的 ID 进行搜索,也可以通过博客的标题进行搜索,但我只希望标题出现在网址栏中,而不是 ID。

由于需要持续维护,我无法通过重定向规则执行此操作。

  1. Controller 是执行此操作的正确位置吗? - 请记住,在我使用 ID 从数据库中检索它之前,我可能没有我的头衔

  2. 我将如何更改 URL 以显示标题与 ID?

最佳答案

我认为如果 ID 是数字并且是有效的 contentId,您应该做的是将 RedirectResult 返回到新的 Url:

            int contentId;
if (Int32.TryParse(content, out contentId))
{
model = service.GetBlogById(contentId);
if(model != null)
{
return RedirectResult(/*url using the title*/);
}
}
else
{
model = service.GetBlogByTitle(content);
}

//Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
return View(model);

当然,这将导致服务器的另一次往返,但我可以看到一种无需页面重定向即可更改浏览器 URL 的方法。您还应确保您网站上所有已发布的网址都使用标题而不是 ID。

希望对您有所帮助。

关于c# - 在操作命中 MVC 后更改 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569588/

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