我正在研究.Net核心mvc项目,其中一个操作需要获得三个参数,所以我首先在Startup.cs中创建了一个新的路径
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "partner_detail",
pattern: "Partners/Detail/{id}/{name}/{location}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}/{title?}");
});然后有一个用户可以单击特定合作伙伴的表,它将调用partnercontroller
@Html.ActionLink(Model.Partner.Name, "Detail", "Partners", new { id = Model.Partner.Id, name = Model.Partner.Name, location = Model.Location }, new { @class = "anchor-1" })我的行动方法如下,
[AllowAnonymous]
public IActionResult Detail(Guid id, string name, string location)
{
string friendlyName = FriendlyUrlExtension.GetFriendlyTitle(name);
string friendlyLocation = FriendlyUrlExtension.GetFriendlyTitle(location);
if (!string.Equals(friendlyName, name, StringComparison.Ordinal) || !string.Equals(friendlyLocation, location, StringComparison.Ordinal))
{
return this.RedirectToRoutePermanent("partner_detail", new { id = id, name = friendlyName, location = friendlyLocation });
}
return View();
}我正在将名称和位置转换为SEO友好名称,并将其重定向到上述路线,
Url在格式化后是
https://myhost:00001/Partners/Detail/571ee251-b342-4fd3-b3df-0471ed54078e/partner-1/location-7
我有两个问题要问你们这些专家
有人能帮我吗?
发布于 2020-05-20 04:38:26
好吧,我修好了。我使用了.net核心锚标记助手,如下所示,
<a controller="Partners" asp-action="Detail" asp-route-id="@Model.Partner.Id"
asp-route-name="@Model.Partner.Name" asp-route-location="@Model.Location">@Model.Partner.Name</a>并从startup.cs中删除路由并作为属性添加到控制器操作中。
[Route("Partners/Detail/{id}/{name}/{location}", Name = "partner_detail")]任何使用锚标记助手的人都要确保您的路由参数名与路由属性中的参数相同。
关于锚标记助手MSDN
https://stackoverflow.com/questions/61899360
复制相似问题