세부 사항없이 ASP.MVC 경로
-
18-09-2019 - |
문제
/{controller}/{action}/{id}보다 짧은 URL을 원합니다.
예를 들어 {컨트롤러}/{id}를 원합니다. 여기서 {id}는 문자열입니다.
이를 통해 간단한 경로, 예를 들어 사용자/사용자 이름, 페이지/pageName, 뉴스/뉴스 이름이 허용됩니다. URL (사용자/세부 사항/사용자 이름)에서/세부 사항 조치를 요구하는 것보다이를 좋아합니다. 이는 최종 사용자에게는 덜 우아합니다.
이 수준의 단순함을 원하는 컨트롤러에 대한 사용자 정의 경로를 설정 하여이 작업을 쉽게 만들 수 있습니다. 그러나 이것은 {controller}/{action}과 같은 다른 동작을 구현할 때 두통이 발생합니다. 여기서 {action} = 'create',이 경우 문자열 {action}은 문자열 {id}와 충돌하기 때문입니다.
내 질문 : URL이 /News /Create 인 경우 조치로 취급되지만 URL이 다른 것인 경우, 예를 들어 /News /a-Gorilla-ate-my- 논문은 ID로 취급됩니다.
경로를 설정할 때 이것을 정의 할 수 있기를 바랍니다.
업데이트:
Ben Griswold의 답변을 사용하여 기본 ASP.NET MVC 경로를 다음과 같이 업데이트했습니다.
routes.MapRoute(
"CreateRoute", // route name
"{controller}/Create", // url with parameters
new { action = "Create" } // parameter defaults
);
routes.MapRoute(
"DetailsRoute", // route name
"{controller}/{id}", // url with parameters
new { action = "Details" } // parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
이는 기본적으로 세부 사항 페이지가 단순화 된 URL을 사용한다는 매력과 수단으로 작동하지만 (업데이트/삭제/세부 사항) 원하는 경우에도 여전히 특정 작업을 타겟팅 할 수 있습니다.
물론, 예약 된 "작성"단어를 ID로 허용하지 않아야합니다. 그렇지 않으면 사용자는 "Create"라는 이름으로 기사를 작성하려고 시도 할 수 있습니다.
이것은 정말 좋습니다. 누군가이 접근법에 문제가 있다는 것을 보면 차임이지만 지금까지는 그것을 좋아합니다.
해결책
나는 당신이 각 예약 된 단어에 대한 경로를 만드는 것이 남아 있다고 생각합니다. 예를 들어,
routes.MapRoute("CreateRoute",
"{controller}/Create",
new { action = "Create" }
);
이 경로가 다른 사용자 정의 경로 앞에 나열되는 한, /news /create, /user /create 등을 처리합니다.
비슷한 패턴을 따르는 다양한 CRUD 작업에 대한 추가 경로가 필요하다고 생각합니다.