본문 바로가기
Programming/.NET

MVC Controller HttpGet, HttpPost Attribute 동시 사용시 주의점

by 째스터 2022. 6. 23.
728x90

.NET MVC Controller 에서 아래와 같이 HttpGet, HttpPost Attribute를 동시에 사용할 경우 조심해야 한다.

[HttpGet]
[HttpPost]
public ActionResult SomeController()
{
	return View();
}

이 경우 GET, POST request 모두에 대해서 404 에러가 발생한다.
이를 방지하기 위해 아래와 같이 사용해야 한다.

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult SomeController()
{
	return View();
}

 

 

어떤 착한 아저씨가 test case를 정리해주셨다.

| Method    | URL                   | Response                                                                                  |
|--------   |---------------------- |----------------------------------------------------------------------------------------   |
| GET       | /ctrl/test/5          | { "input": 5, "when": "/Date(1408041216116)/", "req": "GET", "call": "Test" }             |
| POST      | /ctrl/test/5          | { "input": 5, "when": "/Date(1408041227561)/", "req": "POST", "call": "Test" }            |
| PUT       | /ctrl/test/5          | { "input": 5, "when": "/Date(1408041252646)/", "req": "PUT", "call": "Test" }             |
| GET       | /ctrl/testgetonly/5   | { "input": 5, "when": "/Date(1408041335907)/", "req": "GET", "call": "TestGetOnly" }      |
| POST      | /ctrl/testgetonly/5   | 404                                                                                       |
| PUT       | /ctrl/testgetonly/5   | 404                                                                                       |
| GET       | /ctrl/TestPostOnly/5  | 404                                                                                       |
| POST      | /ctrl/TestPostOnly/5  | { "input": 5, "when": "/Date(1408041464096)/", "req": "POST", "call": "TestPostOnly" }    |
| PUT       | /ctrl/TestPostOnly/5  | 404                                                                                       |
| GET       | /ctrl/TestBoth/5      | 404                                                                                       |
| POST      | /ctrl/TestBoth/5      | 404                                                                                       |
| PUT       | /ctrl/TestBoth/5      | 404                                                                                       |
| GET       | /ctrl/TestVerbs/5     | { "input": 5, "when": "/Date(1408041709606)/", "req": "GET", "call": "TestVerbs" }        |
| POST      | /ctrl/TestVerbs/5     | { "input": 5, "when": "/Date(1408041831549)/", "req": "POST", "call": "TestVerbs" }       |
| PUT       | /ctrl/TestVerbs/5     | 404

 

- 참고 링크
https://stackoverflow.com/a/25315651/19392359

 

MVC [HttpPost/HttpGet] for Action

I am using MVC C#. Can somebody give an example on why one would use [HttpPost/HttpGet] for an Action. How can an active have both - what is the practical use?

stackoverflow.com

 

728x90

댓글