2017-01-19 10 views
5

MVC4 응용 프로그램에 Attribute Routing을 사용하고 있습니다. 경로를 [Route("test-{testParam1}-{testParam2}")]으로 설정했습니다. 여기서`{testParam2} '는'test '라는 단어로 구성 될 수 있습니다. 예를 들어 아래와 같이 URL을 입력하면MVC4에서 특성 라우팅이 작동하지 않습니다.

localhost:33333/test-temp-test-tempparam2 

이 오류가 발생합니다. 여기 URL에서 은 test tempparam2의 두 단어로 test-tempparam2으로 포맷되어 있습니다. test 단어가 {testParam2}의 마지막 위치에 있으면 잘 실행됩니다. 즉, URL이 .../test-temp-tempParam2-test과 같으면 잘 실행됩니다. 그러나 다음과 같은 오류가 발생했습니다. .../test-temp-test-tempParam2. 다음은

[Route ("test-{testParam1}-{testParam2}")] 
public ActionResult Foo (int testParam2) {...} 

지금이 URL을 다음 시도 ... 도움이 될 수 있습니다 코드입니다. 내 경우

  • localhost:(port)/test-test-temp-1

    localhost:(port)/test-temp-1

    1. 는 두 번째 오류를 제공합니다. 이 경우 첫 번째 매개 변수는 test temp에서 test-temp으로 지정됩니다. 처음에는 잘 돌아갑니다.

      이 문제를 해결하는 방법은 무엇입니까?

    +0

    {testparam2}를 test_tempparam2로 사용할 수 있습니까? –

    +0

    GitHub에서이 프로젝트를 살펴보십시오. 너겟 패키지로 배포됩니다. https://github.com/AtaS/lowercase-dashed-route – jvanrhyn

    +0

    @DhavalR은 문제를 재현하는 데 사용할 수있는 [mcve]를 제공합니다. 그렇게하면 더 나은 답변을 찾을 수 있습니다. – Nkosi

    답변

    2

    영업 이익은 경로 템플릿의 마지막 매개 변수가 int

    이 경로 제약 조건을 사용이라고 지적했다.

    경로 제약 조건을 사용하면 경로 템플릿의 매개 변수가 일치하는 방식을 제한 할 수 있습니다. 일반 구문은 {parameter:constraint}입니다. 예 :

    [Route ("test-{testParam1}-{testParam2:int}")] 
    public ActionResult Foo (int testParam2) {...} 
    

    따라서 다음 두 URL을 시도 할 때.

    localhost:(port)/test-temp-1 
    
    localhost:(port)/test-test-temp-1 
    

    경로 데이터 {testParam1 = temp}-{testParam2 = 1}

    을 일치합니다 첫 번째 그리고 두 번째는 경로 데이터 {testParam1 = test-temp}-{testParam2 = 1}

    +0

    글쎄, 나는 '속성 라우팅'에서'제약'에 대해 배웠다. 당신의 본보기와 설명이 좋다. 그러나 나는 FrankFajardo의 코멘트와 함께 갈 것이다. 귀하의 코드 (url)가 언급 한대로 작동하기 때문입니다. 하지만 '{tempParam1}'에 두 개 이상의 문자 (예 : temp-test-temp)가있는 경우 오류가 발생합니다. 'test-temp-test-2'와 같은 url이 있다면 작동 할 것입니다. 하지만 'test-temp-test-temp-2' 일 때는 작동하지 않습니다. 그래서'~/{tempParam1} - {tempParam2}'또는'test/{tempParam1} - {tempParam2} '와 같은'속성 루트 '를 변경해야합니다. BTW 귀하의 답변과 설명 주셔서 감사합니다. – DhavalR

    0

    당신은 당신의 코드 조각 다음 파일 Global.asax에 한 함과 일치합니다?

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); 
    
        routes.MapMvcAttributeRoutes(); 
    
        routes.MapRoute(
         name: “Default”, 
         url: “{controller}/{action}/{id}”, 
         defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } 
        ); 
    }