문제

acceptverbs (..)] 속성으로 액션 메소드를 장식 한 경우 (경로를 등록 할 때) 경로 정의에 HTTPVERB 제약 조건을 등록해야합니까?

예를 들어. 나는 이것을 가지고있다.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{ .. }

이 조치를 제약으로 지칭하는 경로에 이것을 추가해야합니까?

도움이 되었습니까?

해결책

둘 사이의 차이점은 다음과 같습니다. Create 문제의 메소드가 HomeController.

사용 AcceptVerbs 속성은 라우팅에 영향을 미치지 않습니다. 실제로 Action Invoker가 사용하는 것입니다. 당신이 할 수있는 것은 각각 다른 HTTP 방법에 응답하는 동일한 이름의 컨트롤러에 2 개의 동작 메소드가 있다는 것입니다.

public ActionResult Create(int id) { .. }

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection) { .. }

그래서 요청할 때 /home/create 들어 오면 경로가 일치하고 컨트롤러의 호반에 대한 요청을 꺼냅니다. 그런 다음 Invoker는 AcceptVerbs 기인하다.

사용 HttpMethodConstraint 라우팅에서 경로 자체가 요청과 일치하지 않도록합니다. 따라서 게시물 요청이 등장 할 때 /home/create, 해당 경로가 요청과 일치하지 않기 때문에 액션 방법은 호출되지 않습니다. 다른 경로가 가능합니다 ~ 할 것이다 그래도 그 요청과 일치합니다.

여기서 겹치는 이유 중 하나는 라우팅이 ASP.NET 3.5 SP1의 기능이며 MVC에만 국한되지 않기 때문입니다. MVC는 라우팅을 사용하지만 라우팅은 동적 데이터에서도 사용되며 라우팅을 ASP.NET 웹 양식과 통합 할 계획입니다.

다른 팁

아니 - Create는 게시물 요청에만 응답합니다.

다른 acceptverb 속성을 가진 다른 구현 또는 다른 모든 요청을 포착 할 속성이없는 다른 구현을 가질 수 있습니다.

그것이 당신의 유일한 생성 방법이라면, GET (또는 기타 비 포스트) 요청은 404를 초래할 것입니다.

나는 후드 아래에서 이것이 어쨌든 라우팅 엔진에 의해 수행된다고 가정합니다. [편집 : 아니, Haacked의 게시물 참조

먼저 다음과 같이 장식하십시오.

[ActionName("ItemEdit"), AcceptVerbs(HttpVerbs.Post)]
public virtual object ItemSave(Menu sampleInput)

그런 다음 다음과 같은 경로를 추가해야합니다.

 AddRoute(
                "SampleEdit",
                "Admin/{sampleID}/Edit",
                new { controller = "Sample", action = "ItemEdit", validateAntiForgeryToken = true },
                new { areaID = new IsGuid() },
                new { Namespaces = controllerNamespaces }
           );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top