2012-03-18 3 views
1

ASP.NET MVC 3을 처음 사용하고 ASP.NET MVC를 사용하여 URL 매개 변수로 username/id를 사용하고 싶습니다.url 매개 변수로 사용자 이름을 갖고 싶습니다.

예를 들어 내가 갖고 싶어 :

http://mylink.com/username 

또는

http://mylink.com/id 

HomeController 행동 Profile로 리디렉션.

그럴 수 있습니까?

나는

routes.MapRoute(
      "Profile", // Route name 
      "{controller}/{id}", // URL with parameters 
      new { controller = "Home", action = "Profile", id = UrlParameter.Optional } // Parameter defaults 
     ); 

을 사용하여 새 경로를 만들려고하지만 그것은 작동하지 않습니다.

감사합니다.

+0

http://mylink.com/mycontroller/id –

+0

@COLDTOLD와 같이 url somethink 옆에 컨트롤러 이름이 필요하기 때문에 작동하지 않을 가능성이 높습니다. 컨트롤러 이름이 필요하지 않습니다. URL 패턴은 완전히 합법적입니다. @salamis, 프로필 작업 방법의 서명은 무엇입니까? 'string username' 또는'int? 이드? – danludwig

+0

문자열 사용자 이름 mate. – glarkou

답변

3

이후의 패턴을 수행 할 수 있어야합니다.

경로 코드 :

// be sure to register your custom route before the default routes 
routes.MapRoute(null, // route name is not necessary 
    "{username}", 
    new { controller = "Home", action = "Profile", } 
); 

routes.MapRoute(null, 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

컨트롤러 코드 :

public class HomeController : Controller 
{ 
    public ActionResult Profile(string username) 
    { 
     // http://mylink.com/myusername should hit this method 
    } 
} 

응답 한

내가없이로드 질문에 대답하지 않으려는 언급을 여기에 작동합니다 예입니다 디자인중인 URL 스키마 또는 프로젝트에 대한 정보를 알고 있어야합니다. 그러나 나는 그것이 바로 away.You에 문제가 당신이하고 싶은 말은 볼 2 개 이상의 URL의 :

, 이것은 당신이 어떤을 할 수 없음을 의미 {사용자 이름} 사용자 이름이 "정보"인 사용자. 그렇지 않으면 시스템에서 제공 할 콘텐츠 (약 페이지 또는 사용자 이름 "about"의 프로필 페이지)를 알 수 없습니다. MVC에서 URL은 대소 문자를 구분하지 않습니다.

더 많은 페이지로 더 큰 응용 프로그램을 만드는 경우 프로필 작업의 URL 범위를 지정하는 것이 좋습니다. 이상과 같이 아마 뭔가 :

, 당신은 아직도 당신이 원하는 URL 패턴을 수행 할 수 있습니다. 그러나 사용자가 다른 경로와 일치하는 사용자 이름을 가지지 않도록 여러 가지 유효성 검사를 추가해야하며 더 많은 사용자 지정 경로를 작성해야합니다. 그래서 당신은 정말로 당신 자신을 위해 더 많은 일을하고 있습니다. 당신은 경로에서이 같이해야 할 것이다 :

// more specific routes must be added first 

routes.MapRoute(null, 
    "About", 
    new { controller = "Home", action = "About", } 
); 

routes.MapRoute(null, 
    "{username}", 
    new { controller = "Home", action = "Profile", } 
); 

routes.MapRoute(null, 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

위의 노선에 대한/정보] 행동에 대해 요청 및 프로필 액션에 다른 모든/somestring 요청을 일치합니다.

+0

고마워요. 그것은 효과가있다. 가능한 답변을 @ http://stackoverflow.com/questions/235118/asp-net-mvc-route-to-username 게시 확인하고 특히 두 번째 솔루션을? 'http : // mylink.com/About' 또는 다른 정적 페이지를 추가하고자 할 때를 대비하여 예외를 추가 할 수 있습니까? 도와 주셔서 다시 한번 감사드립니다. – glarkou

+0

고맙습니다. 진심으로! – glarkou

관련 문제