我想要一個動作同時響應GET和POST。我試過以下GET和POST到ASP.NET MVC中的相同控制器操作
[HttpGet]
[HttpPost]
public ActionResult SignIn()
這似乎沒有工作。有什麼建議麼 ?
我想要一個動作同時響應GET和POST。我試過以下GET和POST到ASP.NET MVC中的相同控制器操作
[HttpGet]
[HttpPost]
public ActionResult SignIn()
這似乎沒有工作。有什麼建議麼 ?
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}
這不是我正在尋找的,這是通過函數重載爲GET和POST分開方法的默認MVC實現。我對MVC並不陌生,除了表單集合的標準POST操作外,我還試圖讓GET操作也響應某些POST事件。 – Cranialsurge 2010-07-12 22:45:02
然後你需要關注Kurts的答案。沒有屬性會處理這兩個。如果您試圖讓POST請求轉到不同的操作,那是不可能的。你的行動將不得不執行你正在尋找的切換。 – 2010-09-18 02:49:00
行動應對這兩個GET和默認的帖子,這樣你就不必指定任何東西:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
根據您的需要時,你仍然可以被操作上列舉HTTPMethod執行根據不同的邏輯在HttpContext.Request.HttpMethod值上。
這很好,直到你嘗試使用視圖模型!在後期操作中,您通常會傳遞視圖模型,我嘗試使用可選參數,並將其默認爲空,但這不起作用。 – JBeckton 2011-01-25 19:46:56
@JBeckton通常我有一個GET方法,只有查詢字符串參數'SignIn(Guid?UserId)'和POST有視圖模型'SignIn(SomeVM vm)'並且都調用共享私有方法'SignInHandleGetPost(...) ......這可能需要VM必須初始化GET方法,或者可選參數,或者任何你喜歡做的重構ruseable/shared代碼。 – AaronLS 2013-04-22 20:58:10
@JBeckton我剛剛嘗試了ASP.NET MVC 4.6.1示例項目,使用'AccountController.Login(String returnUrl,LoginViewModel模型)'方法,它工作正常。 'model'在GET時爲空,在POST時爲非空。但是,[ValidateForgeryToken]需要被重寫,因爲ValidateForgeryToken在GET請求上引發異常。 – Dai 2016-07-19 12:25:52
這可以使用AcceptVerbs屬性。它稍微更冗長但更靈活。
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
更多關於msdn。
是的,但如果該方法使用參數(例如SignIn(SingInParams參數)... for GET),它們從URI獲取(因此必須指定[FromUri]),並且對於POST,它們從body中獲取(so [FromBody]必須指定)? – jabko87 2016-10-24 11:17:37
這應該是公認的答案。 – 2017-09-13 14:13:20
什麼不行,它是如何失敗? – 2010-07-12 20:44:14
解釋問題:該操作被忽略。每個屬性都將排除所有其他請求方法,因此該操作最終不會接受任何請求方法。 – Guffa 2011-11-03 10:47:06
爲什麼EvilRryry的答案不被接受?它爲我做了詭計。 – 2012-05-31 16:04:36