문제

/{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 작업에 대한 추가 경로가 필요하다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top