2009-05-03 61 views
4

在ASP.NET MVC控制器方法可以被修飾爲接受特定的HTTP方法(Get,Post,Get ..等)。在MvcContrib和ASP.NET MVC之間有3個類:「AcceptGet,AcceptPost」和AcceptVerbs。所有三個:「AcceptGet,AcceptPost」和AcceptVerbs都做同樣的事情。它們指定了什麼http方法被允許訪問一個動作/方法。使用哪個:「AcceptGet,AcceptPost」(MvcContrib)與AcceptVerbs(ASP.NET Mvc)?

AcceptGet和AcceptPost在MvcContrib中。雖然AcceptVerbs是Mvc框架的原生代碼。哪個更好用?

AcceptGet/AcceptPost(MvcContrib)

/// <returns></returns> 
[AcceptGet] 
public ActionResult Profile(string id) 

AcceptVerbs(ASP.NET MVC)

/// <returns></returns> 
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult EditRequest(string id) 

文檔的MvcContrib項目AcceptPost可以發現here

看來AcceptGet和AcceptPost是爲填補ASP.NET Mvc框架早期版本中的一個缺陷而創建的。 AcceptGet和AcceptPost類提供了強類型的HttpMethod屬性。

ASP.NET MVC發佈與AcceptVerbs這需要一個枚舉:

[Flags] 
public enum HttpVerbs 
{ 
    Delete = 8, 
    Get = 1, 
    Head = 0x10, 
    Post = 2, 
    Put = 4 
} 

我的問題是哪一個是更好地執行,AcceptGet/AcceptPost或AcceptVerbs(與HttpVerbs枚舉類型)?

回答

5

我不認爲有兩種實現之間的差異很大,但考慮到

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult EditRequest(string id) 

是框架的一部分,現在,我一直用這個。兩者都是強類型的,所以在那裏沒有真正的區別,而HttpVerbs enum包含了不在MVC contrib版本中的Delete,Head和Put。

2

截至ASP.Net MVC 2 Preview 1發佈,以下屬性在覈心MVC框架--HttpPost,HttpGet,HttpDelete,HttpPut。當然,AcceptVerbs屬性仍然受支持。

所以,如果您使用的是MVC 2,那麼您可以使用這些新屬性,而不需要MVC Contrib版本的AcceptPost和AcceptGet。

相關問題