2016-08-17 1 views
1

동일한 경로를 가지고 있지만 HTTP 메서드에서만 다른 두 가지 메서드를 내 컨트롤러에 갖고 싶습니다. 특히, 내 노선은동일한 경로에서 2 가지 방법 (GET 및 POST)을 사용할 수 있습니까?

routes.MapRoute(
    name: "DataRoute", 
    url: "Sample/{user}/{id}/", 
    defaults: new { controller = "Sample", action = "--not sure--", user = "", id = "" } 
); 

모양과 나는 같은 내 컨트롤러 2 가지 방법이있는 경우 :

[HttpGet] 
public void ViewData(string user, string id) 

[HttpPost] 
public void SetData(string user, string id) 

원하는 동작 내가 Sample/a/b를 GET과 I가 POST 경우 SetData()를 호출하는 경우 ViewData()를 호출하는 것입니다 Sample/a/b, 동일한 URL

2 개의 별도 경로를 만들 수 있지만 설계상의 이유로 하나의 경로가 GETPOST으로 만 구분되기를 원합니다. 새로운 경로를 만들 필요없이 경로 또는 컨트롤러를 구성 할 수있는 방법이 있습니까?

+0

짧은 대답은 아니오입니다. 그러나 당신은 URL을 통해 게시 할 수 없습니다. 그게 당신이 뭘하려고하는지 불분명. –

+0

속성 라우팅을 사용하면 다른 방법으로 동일한 경로를 설정할 수 있어야합니다. – Nkosi

답변

5

속성 라우팅을 사용하면 다른 방법으로 동일한 경로를 설정할 수 있습니다.

[RoutePrefix("Sample")] 
public class SampleController : Controller { 
    //eg GET Sample/a/b 
    [HttpGet] 
    [Route("{user}/{id}")] 
    public void ViewData(string user, string id) { ... } 

    //eg POST Sample/a/b 
    [HttpPost] 
    [Route("{user}/{id}")] 
    public void SetData(string user, string id) { ... } 
} 

당신은 POST의 몸에서 약간의 페이로드를 취하도록 SetData 방법을 편집해야합니다 규칙 기반 경로

routes.MapMvcAttributeRoutes(); 

전에 라우팅 속성을 사용하는 것을 잊지 마십시오.

public void SetData(string user, string id, MyCustomObject data) { ... } 
+0

감사! 나는 이것을 시도 할 것이다. 그래도 컨벤션 기반 라우팅을 사용하여이 작업을 수행 할 수있는 방법이 없습니까? – Booley

관련 문제