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.Routing
및 Microsoft.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
'Programing' 카테고리의 다른 글
Java 8의 속성을 기반으로 객체 목록에서 중복 제거 (0) | 2020.12.14 |
---|---|
Webpack "OTS 구문 분석 오류"글꼴로드 (0) | 2020.12.14 |
사용자 정의 유형이있는 std :: maps를 키로 사용하려면 어떻게해야합니까? (0) | 2020.12.14 |
ArrayAdapter에서 항목을 추가 / 제거 할 수없는 이유는 무엇입니까? (0) | 2020.12.14 |
Git은 커밋 후에도 삭제 된 파일을 계속 표시합니다. (0) | 2020.12.14 |