Не удается подключить перенаправленные URL в ядре asp.net mvc - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь залить некоторые перенаправленные URL-адреса. Я следовал этой статье , но не могу повторить результат. При установке точки останова в TransformOutbound () она никогда не срабатывает, поэтому я думаю, что преобразователь никогда не вызывается по какой-то причине.

SlugifyParameterTransformer

public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        string result = default;

        if (!value.IsNull())
        {
            result = Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
        }

        return result;
    }
}

Startup :

public void ConfigureServices(IServiceCollection services)
{
    services.AddLCAssets(opt => 
        {
            opt.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
        });
}

AddLCAssets

public static IServiceCollection AddLCAssets(this IServiceCollection services, Action<MvcOptions> options = default)
{
    if (options != default)
    {
        services.AddMvc(options)
            .SetCompatibilityVersion(Const.DefaultCompatibilityVersion);
    }
    else
    {
        services.AddMvc()
            .SetCompatibilityVersion(Const.DefaultCompatibilityVersion);
    }

    return services;
}

1 Ответ

1 голос
/ 24 апреля 2019

Сначала ваш SlugifyParameterTransformer класс должен быть следующим:

public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        // Slugify value
        return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
    }
}

Затем в Startup.ConfigureServices следующим образом:

services.AddRouting(option =>
{
    option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
    option.LowercaseUrls = true;
});

Тогда ваша конфигурация маршрута в Startup.Configure должна выглядеть следующим образом:

app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller:slugify}/{action:slugify}/{id?}",
            defaults: new { controller = "Home", action = "Index" });
    });

Приведенные выше настройки сделают /Employee/EmployeeDetails/1 маршрут до /employee/employee-details/1

...