2014-04-08 2 views
0

MVC3을 사용하고 있습니다. 어느 누구도 HttpGet Method를 사용하여 항목을 삭제하는 것은 나쁜 습관으로 URL을 탐색하고 항목을 삭제할 수 있음을 알게되었습니다. 그래서 HttpPost 메서드에서 삭제 작업을 수행하려고합니다.MVC 삭제 안 HttpPost 메서드

문제는 내가 삭제 버튼을 클릭하면 HttpGet 메소드에만 적용되지만 HttpPost 메소드에는 적용되지 않는다는 것입니다.

내가

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Delete(int id) 
    { 
     return RedirectToAction("Index"); 
    } 

답변

0

를 다음과 개념적으로는 삭제의 POST 동사를 사용하는 것이 올바른 아니에요으로 컨트롤러 페이지입니다 webgrid하고 그것 index.cshtml 파일

<div id="DataTable"> 
@grid.GetHtml(htmlAttributes: new {id="gvMovies" }, 
columns:grid.Columns(
grid.Column("Title","Movie Title",canSort:true), 
grid.Column("Director","Film Maker",canSort:false), 
grid.Column(header:"Action", 
format:@<text> 
<a href="@Url.Action("Edit", "Movies", new { id = @item.Id })">Edit</a> 
@using (Html.BeginForm("Delete", "Movies", new { id = @item.id }, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.ActionLink("Delete", "Delete", new { id = @item.id }, new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 
} 

</text>))) 
</div> 

을 사용했습니다. POST - 정보 게시 용입니다. 올바른 방법은 Delete 메서드에서 특성을 제거하고 GET 동사와 함께 사용하는 것입니다.

이제 정말로 POST를 사용해야하는 경우 가장 먼저 실수하는 것은 양식을 제출할 제출 버튼 대신 링크를 만드는 것입니다. 당신이 게시물에 ID를 전송하려면
@Html.ActionLink("Delete"<input type=submit value="del" >하려면

숨겨진 추가 할 수 있습니다 변경해야하므로 대신 링크의 제출 '버튼을 추가해야합니다

<input type="submit" value="Delete"> 
+0

가능하면 친절이 링크를 통해 이동 작동합니다 생각 http://stephenwalther.com/archive/2009/01/21/asp- ([삭제 링크 보안 구멍을 작성합니다] net-mvc-tip-46-ndash-donrsquot-use-delete-links- 때문에) 당신은 HttpGet 메서드를 사용하여 삭제 수행을 싫어하는 이유를 알 수 있습니다. – SparAby

+0

귀하의 우려를 이해할 수 있지만 제안 된 해결책이 보이지 않는다고 말해야합니다. 권리. 게시물 작성자가 말한 것은 삭제뿐만 아니라 데이터를 변경하는 Get 작업도 취약하다는 것입니다. 나는 차라리 취약 할 수있는 행동에 대한 일련의 보안 규칙을 검증하는 보안 속성을 생성하려고한다. 규칙은 refferal과 요청 된 콘텐츠 유형이 될 수 있습니다. –

0

:와

@Html.ActionLink("Delete", "De... 

교체 폼에 입력하여 양식에 제출 버튼 앞에 다음과 같이 추가 할 수 있습니다.

,210

그래서 난이 코드는

@using (Html.BeginForm("Delete", "Movies", new { id = @item.id }, FormMethod.Post, new { enctype = "multipart/form-data" })) 

    { 
     <input type="hidden" [email protected] name="itemid" > 
     <input type=submit value="del" > 
    }