Programing

ASP.NET Core에서 소문자 라우팅을 어떻게 적용하나요?

lottogame 2020. 12. 14. 07:43
반응형

ASP.NET Core에서 소문자 라우팅을 어떻게 적용하나요?


ASP.NET 4에서는 routes.LowercaseUrls = true;RegisterRoutes처리기 에서처럼 쉽습니다 .

이를 달성하기 위해 ASP.NET Core에서 동등한 것을 찾을 수 없습니다. 나는 그것이 여기있을 것이라고 생각한다 :

app.UseMvc(configureRoutes =>
{
    configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});

하지만 configureRoutes문서에서 찾을 수없는 어딘가에 확장 메서드가 없으면 허용 할 수있는 것은 없습니다.


ASP.NET Core의 경우 :

클래스 ConfigureServices메서드에 다음 줄을 추가합니다 Startup.

services.AddRouting(options => options.LowercaseUrls = true);

의견으로 답변 해 주신 Skorunka에게 감사드립니다. 실제 답변으로 홍보 할 가치가 있다고 생각했습니다.


다른 답변에서 알 수 있듯이 다음을 추가하십시오.

services.Configure<RouteOptions>(options => options.LowercaseUrls = true);

전에

services.AddMvc(...)

훌륭하게 작동하지만 Identity를 사용하는 경우 다음도 필요합니다.

services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
    var appCookie = options.Cookies.ApplicationCookie;
    appCookie.LoginPath = appCookie.LoginPath.ToString().ToLowerInvariant();
    appCookie.LogoutPath = appCookie.LogoutPath.ToString().ToLowerInvariant();
    appCookie.ReturnUrlParameter = appCookie.ReturnUrlParameter.ToString().ToLowerInvariant();
});

그리고 필요한 경우 IdentityUser, 및 둘 다 IdentityRole자신의 클래스로 대체 하십시오.

방금 .NET Core SDK 1.0.4 및 1.0.5 런타임으로 테스트했습니다.


해결책을 찾았습니다.

어셈블리 : Microsoft.AspNet.RoutingMicrosoft.Extensions.DependencyInjection네임 스페이스에서 ConfigureServices(IServiceCollection services)메서드 에서이 작업을 수행 할 수 있습니다 .

services.ConfigureRouting(setupAction =>
{
    setupAction.LowercaseUrls = true;
});

ASP.NET Core 2.2의 업데이트

에서 ASP.NET 코어 2.2 , 당신은 또한 당신의 경로를 만들 수 있습니다 소문자와 함께 사용하여 점선 ConstraintMap경로를 만들 것이다 /Employee/EmployeeDetails/1/employee/employee-details/1대신 /employee/employeedetails/1.

이렇게하려면 클래스 ConfigureServices메서드 에서 다음을 수행 하십시오 Startup.

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

그리고 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();
    }
}

그리고 경로 구성은 다음과 같아야합니다.

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


For identity, @Jorge Yanes Diez answer doesn't work in ASP.NET Core 2.2 (I think 2.x), so if you use Identity and ASP.NET Core 2.2 (2.x) here is the solution:

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = "/account/login";
    options.ReturnUrlParameter = "returnurl";
    ...
});

Ref: Configure ASP.NET Core Identity


I had this on RegisterRoutes::RouteConfig:

routes.LowercaseUrls = true;

참고URL : https://stackoverflow.com/questions/36358751/how-do-you-enforce-lowercase-routing-in-asp-net-core

반응형