2013-06-29 19 views
2

我需要構建一個龐大的API,並且我正在嘗試使用WebAPI而不是默認的MVC4項目,並且它似乎只會讓事情變得更加困難。C#WebAPI值得嗎?我可以使用標準的MVC4來創建我的API嗎?

  • 只能有4控制器Get, Post, Put, Delete方法,如果我想要更多我需要修改路線的特定方法
  • FluentValidation不會的WebAPI工作,所以我需要使用DataAnnotations,我真的不知道想要。
  • 不能使用dynamic返回數據類型

我的問題是:這真的會是壞的,如果我會用MVC4項目和使用默認ActionResults返回JSON的?如果您可以輕鬆地將您的項目轉換爲API,那麼使用WebAPI的真正優勢是什麼?爲什麼他們甚至將它們放在第一位?

+4

我們設法將FluentValidation集成到WebApi中。我們所要做的只是實現一個自定義的ModelValidatorProvider。請參閱以瞭解更多詳細信息:http:// stackoverflow。COM /問題/ 12975291 /如何對鉤fluentvalidator至A-MVC-4-Web的API。對於「動態」數據類型,我看不出爲什麼你想返回一個'動態'到客戶端..你的意思是匿名對象? –

+0

如果你只關心JSON,那麼你可以從Web API控制器返回一個動態對象。 (XML序列化程序不支持動態。)對於路由,您可以使用基於操作的路由(將「{action}」放入路由模板中,或者使用基於屬性的路由 –

回答

2

您絕對應該嘗試使用NancyFx(ASP.NET Web API,如REST框架,但輕量級)。那麼你可以有這樣的方法:

public class SampleModule : Nancy.NancyModule 
{ 
    public SampleModule() 
    { 
     Get["/"] = _ => "Hello World!"; 
    } 
} 
+2

這對於API來說很棒。這非常感謝 – sed

+0

感謝Nancy開發者,他們真是太棒了! –

0

如果您很滿意IIS作爲主機,並且您只想返回JSON和HTML,並且您已經熟悉ASP.NET MVC,那麼我會建議您堅持使用它。

WebAPI只有在需要更多的媒體類型靈活性,更多的主機選項以及更多對HTTP頭的直接控制時,才真正開始顯示其優勢。

1

你可以但你不應該使用JsonResult。 Web Api是一個天才的概念。 Web APi使REST更簡單。對於每個實體,您都可以創建新的ApiController並通過它來管理CRUD操作。這裏有幾點。

  1. 你已經提到過,我們不能使用超過Get,Post,Put,Delete的操作,這是不正確的。我使用了以下操作。

    public bool post() 
    { 
        return true; 
    } 
    
    [HttpPost] 
    public bool validate(int id) 
    { 
        return input == 0; 
    } 
    

所以在上面的代碼中,如果您確實張貼了與/ cntrName操作,POST方法將被調用,如果您發佈/ cntrname /驗證/ 4,驗證將被調用。這意味着你可以爲多重請求使用函數重載。

2. 我使用angularJS很多,Web API幫助很大。您必須爲每個Angular控制器聲明1個url,並且每個請求看起來都相同,但會進行適當的調用。 它增加了reusability.Example

[HttpPost] 
public JsonResult post() 
{ 
    return Json("output",JsonRequestBehavior.AllowGet); 
} 

public string post() 
{ 
    return "output"; 
} 

現在如果你想在不同的控制器使用上述方法,用MVC你必須做以下

(string) post().Data //get returned data from JsonResult and convert to string. 
Web Api is just returning string 
  1. 的Web API是一個合乎邏輯的抽象做阿賈克斯請求。當然你可以使用MVC(如果你願意,你也可以使用WebForms)。但web API是寫CRUD-REST應用程序的更好方式。
相關問題