Url.RouteUrl является пустым в ASP.NET Core 3.0 - PullRequest
0 голосов
/ 01 октября 2019

Мы находимся в процессе обновления проекта ASP.NET Core 2.2 до ASP.NET 3.0, который использует маршрутизацию EndPoint.

У нас есть большой список URL-адресов, составленный из Url.RouteUrl с использованием именованных маршрутов, например:

string url = Url.RouteUrl("blog-details", new { title = item.Title, id = item.Id });
// returns correct link of https://example.org/us/blog/some-title-6 in 2.2 but is blank in 3.0

[Route("~/{lang}/blog/{title}-{id}", Name= "blog-details")]
public async Task<IActionResult> Details(string title, int id)
{
}

После обновления до 3.0 эти URL-адреса просто создают пустой href. Наш startup.cs выглядит следующим образом:

public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllersWithViews(options =>
{
    options.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline))); 
})
    .AddViewLocalization(LanguageViewLocationExpanderFormat.SubFolder)
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);

services.AddRazorPages();
... 
}

Мы попытались заменить на ниже, но это создает неправильную ссылку и не позволяет нам повторно использовать в качестве переменной, например:

<a asp-action="Details" asp-controller="Blog" asp-route-title="item.Title" asp-route-id="@item.Id">Link here</a>
url = Url.Action("Details", "Blog", new { id = item.Id, title = item.Title });
url = Url.RouteUrl(new { action = "Details", controller = "Blog", id = item.Id, title = item.Title });

// all returns https://example.org/us/blog/details/6?title=some-title 

<a asp-controller="Home" asp-action="Pricing">Pricing</a>
// returns https://example.org/us/home/pricing instead of correct https://example.org/us/pricing

[Route("~/{lang}/pricing")]
public async Task<IActionResult> Pricing()
{
    ...
}

Это работает, однако:

<a asp-controller="Signup" asp-action="Customer">Sign up</a>
// returns correct https://example.org/us/signup/customer

[Route("~/{lang}/signup/customer")]
public IActionResult Customer()
{
   ...
}

Что мы делаем неправильно, если мы хотим использовать маршрутизацию EndPoint (а не старый 2.2-way)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...