Вы можете думать об этой проблеме в трех частях:
1. Настройте свой веб-сайт для обработки новой маршрутизации
В файле startup.cs вы найдете раздел метода Configure
, который похож на:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
};
Добавить новый тип маршрутак этому (но сохраните существующий маршрут, если вы все еще хотите использовать его для других мест сайта.):
app.UseMvc(routes =>
{
routes.MapRoute(
name: "byBlogTitle",
template: "{controller=Home}/{action=Index}/{blogTitle}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
};
2. Сгенерируйте URL
При размещении ссылки на странице используйте разметку, например:
<a asp-route-blogTitle="@Model.BlogTitle" asp-controller="Blog" asp-action="Blog"
class="a_s_btn myBTN">Read More</a>
3. Убедитесь, что контроллер получит и обработает новый маршрут
Вместо вашего текущего метода контроллера, который ожидает параметр id, вам нужно взять строку blogTitle:
public IActionResult Blog(string blogTitle)
{
var blogModel = new BlogsListViewModel();
blogModel.Blogs = repository.Blogs.OrderBy(p => p.BlogID).Where(p => p.BlogTitle == blogTitle);
return View(blogModel);
}
OfКонечно, детали того, как вы получаете по названию, могут меняться в зависимости от вашей переменной. Важным моментом здесь является то, что имя параметра совпадает с новой частью маршрута, предоставленной на шаге 1.
Не забудьте
Имейте в виду, что теперь вы будетенеобходимо обрабатывать специальные символы в вашем URL. URL-адреса не могут содержать некоторые символы, которые ваши пользователи могут добавить в заголовок своего блога, например символы амперсанда или символы не ascii. ( Допустимые символы в URL )