URL이

2016-08-08 10 views
0

내가 실제로URL이

domainname.com/storecontroller/storename 

처럼 다시 할

domainname.com/storecontroller/storeaction/storename 

처럼 내 응용 프로그램 URL을 정의하고, 나는 URL에서 storeaction을 건너 뛸 필요가, 내가 원하지 않는 querystring과 함께 "?" 어쨌든 경로를 구성하거나 다른 방법으로 경로를 등록하여 그것을 할 수 있습니까?

+0

당신이 원하는 사용 ntrollers 또는 특정 컨트롤러? – Shyju

+0

2 개 또는 3 개의 컨트롤러에 대해서만이 작업을 수행하려고합니다. –

+0

[RoutePrefix ("/ storecontroller/{storename}")] 특정 컨트롤러에 대한 경로 접두사를 추가 할 수 있어야합니다. –

답변

1

예. 당신이 정의 할 필요가

routes.MapRoute("<route name>", "{controller}/{storename}", 
    new 
    { 
     action = "storeaction" 
    }, 
    new 
    { 
     controller = "somecontroller1|somecontroller2|somecontroller3", 
    }); 

(액션 항상 기본 값을 갖게됩니다 "storeaction")

참고 : 당신은 정규식 제약 조건과 특정 컨트롤러에 대한 기본 매개 변수로 작용하고, 일치를 정의 할 수 있습니다 이에서 개막 전에 그것을 잡을하지 않도록 기본 일반적인 경로 전에 경로.

+0

그러나 각 컨트롤러마다 다른 경로를 등록해야하는 경우에도 대답은 완벽합니다. 10 ~ 20 개의 컨트롤러가 필요한 경우 어떻습니까? –

+1

@NomiAli Regex 제약 조건을 사용하여 특정 컨트롤러와의 일치를 제한 할 수 있습니다. 편집 된 대답을 참조하십시오. –

1

모든 협력을위한 Attribute routing

[RoutePrefix("Home")] 
public ActionResult HomeController : Controller 
{ 
    [Route("{storeName}")] 
    public ActionResult ProcessStore(string storeName) 
    { 
    // to do : Return something 
    } 

    public ActionResult Index() 
    { 
    // to do : Return something 
    } 
} 
[RoutePrefix("Payment")] 
public ActionResult PaymentController : Controller 
{ 
    [Route("{storeName}")] 
    public ActionResult ProcessStore(string storeName) 
    { 
    // to do : Return something 
    } 
} 
+0

에서 1) 내 URL이 "anothercontroller/anotheraction"과 같다면 확실하게 작동하지 않습니다. "anotheraction"메서드가 "anothercontroller"에 있다는 것을 알아야합니다. 2)에서 그것은 작동하지 않습니다 그것은 routeconfig에 뭔가가 필요할 수 있습니다? –

+0

@NomiAli 사실. 나는 그 부분을 제거했다. Sedat의 대답은 그 문제를 해결할 것입니다. 내 대답의 속성 라우팅 버전은 계속 작동합니다. – Shyju