2013-10-08 6 views
0

VS.NET 2010에 새로운 MVC 웹 응용 프로그램을 만들었습니다. 문제없이 localhost/Home/Contact에 액세스 할 수 있습니다. 이는 예제 애플리케이션에 내장 된 메소드입니다. 내가 사용이 방법에 액세스하려고하면MVC URL을 사용할 수없는 이유는 무엇입니까?

[HttpPost] 
public ActionResult MyMethod(ClassA content) 
{ 
    return new HttpStatusCodeResult(204); 
} 

:

나는 다른 방법을 추가

로컬 호스트/홈/MyMethod라는

내가 404 오류가 발생합니다. 나는 브라우저에서 직접 (GET) 시도하고 POST를 통해 시도했다. 어떤 생각이 잘못된 것일까 요?

+1

게시 하시겠습니까? 의도적으로 get 요청을 통해 액션에 접근 할 수 없기 때문에'HttpPost' 속성으로 꾸미는 것이 그 이유입니다. –

+0

'[HttpPost]'를 제거한 다음 브라우저에서 방문하십시오. – Nate

답변

1

HttpPost 속성은 POST 요청을 통해서만 작업에 액세스 할 수 있음을 나타내며 다른 요청 유형 (GET, PUT 등)으로부터 사용자를 보호합니다.

POST 요청도 속성없이 작동하지만 GET 요청도 있습니다! 이로 인해 GET 요청을 통해 데이터를 삽입, 업데이트 또는 제거하는 데이터베이스 쿼리가 노출 될 수 있습니다. 이는 나쁜 습관입니다. Google이 www.mysite.com/Users/Delete/{id} 페이지에 대한 색인을 생성한다고 가정하면 GET 요청을 수락하면 완전한 사용자 기반이 삭제 될 수 있습니다.

GET은 데이터를 검색하고, POST은 데이터를 전송합니다. 자세한 내용은 this question을 참조하십시오.

POST 요청을 시작하는 방법은 여러 가지가 있습니다.

$.post(
    '@Url.Action("MyMethod", "Home")', 
    { 
     // data for ClassA. 
     name: $('#username').val(); // example. 
    }, 
    function (result) { 
     // handle the result. 
    }); 

을하지만이 GET 요청 하지 않습니다 일 당신이 HttpPost 속성 액션을 장식하는 경우 :

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.UserName); 
    @Html.TextBoxFor(m => m.UserName); 

    @Html.LabelFor(m => m.Password); 
    @Html.PasswordFor(m => m.UserName); 

    <input type="submit" value="Login" /> 
} 

또는 jQuery.post()를 통해를 :

당신은 Html.BeginForm() 내부 양식을 포장 할 수 있습니다 :

$.get(
    '@Url.Action("MyMethod", "Home")', 
    function (result) { 
     // this will not work. 
    }); 

또는 브라우저를 통해 액세스하려고하는 경우. this blogpost도 참조하십시오.

+0

내 예제에서 204가 반환되거나 HttpPost가이를 차단합니까? – 4thSpace

+0

@ 4thSpace 필자는 그것이 효과가 있다면 Fiddler/Firebug로 가서 시도 할 수 있다고 생각합니다. 왜 그 'HTTP 204'를 그렇게 나쁘게 만들고 싶습니까? –

+0

POST가 필요합니다. – 4thSpace

0

이 방법은 POST를 통해서만 액세스 할 수 있습니다.

+0

감사합니다. 누군가 해당 메소드에 대한 POST를 수행 중이고 HttpPost 속성이 없어도 올바르게 작동해야합니다. POST에 대한 제한 사항 인 HttpPost를 사용하면 어떤 이점이 있습니까? – 4thSpace

+0

또한 204를 반환합니다. POST'ing 페이지에서 그 결과를 캡처하여 표시 할 수 있어야합니다. 그게 내 문제를 해결할거야. – 4thSpace

관련 문제