2011-06-02 52 views
5

我正在爲我們當地的教堂建立一個READ ONLY 應用程序。我可以將ASP.NET MVC3專門用作RESTful Web服務嗎?

我們使用Vimeo來託管我們所有的視頻,並且我希望將我們的Vimeo vids和我們的RSS feed集成到我們的網絡應用程序中。

應用程序中「內容」的其餘部分將是靜態的「信息」以及聯繫表單。

我的問題是,是否只使用ASP.NET MVC3(減去「V」)來驅動JSON到我們的Web應用程序是否可以使用?

回答

10

是的,這個效果很好。只需返回一個JsonResult。

這裏是我在生產中使用的例子:

public partial class StudentController : BaseController { 
    public StudentController(RESTContext portalContext) 
     : base(portalContext) { } 

    [HttpGet, Url("organizations/{organizationId?}/students")] 
    public virtual JsonResult List(Guid? organizationId) { 
     if (organizationId != RESTContext.OrganizationId) 
      throw new HttpNotAuthorizedException(); 

     var query = RESTContext.GetQuery<IQuery<StudentCasesReport>>() 
      .Where(x => x.OrganizationId, organizationId) 
      .OrderBy(x => x.LastName, SortOrder.Ascending); 
     var cases = query.Execute(IsolationLevel.ReadUncommitted); 

     return Json(cases, JsonRequestBehavior.AllowGet); 
    } 

    [HttpGet, Url("organizations/{organizationId?}/students/{studentId?}")] 
    public virtual JsonResult Get(Guid? organizationId, Guid? studentId) { 
     if (studentId.IsNull()) 
      throw new HttpNotFoundExecption(); 

     if (organizationId != RESTContext.OrganizationId) 
      throw new HttpNotModifiedException(); 

     var query = RESTContext.GetQuery<IQuery<StudentCasesReport>>() 
      .Where(x => x.OrganizationId, organizationId) 
      .Where(x => x.StudentCaseId, studentId) 
      .OrderBy(x => x.LastName, SortOrder.Ascending); 
     var cases = query.Execute(IsolationLevel.ReadUncommitted).FirstOrDefault(); 

     if (cases.IsNull()) 
      throw new HttpNotFoundExecption(); 

     return Json(cases, JsonRequestBehavior.AllowGet); 
    } 
} 
+0

這正是我在想什麼。我是網絡服務新手,所以我有點關心最佳實踐。 – 2011-06-02 15:37:25

+0

關於REST ....和MVC的好東西之一。 – ckramer 2011-06-02 15:39:41

+1

您還需要處理404和其他狀態代碼。 MVC3現在給你選擇返回一個狀態碼給用戶。我會推薦AttributeRouteMapper項目來控制控制器級別的路由作爲屬性。使維護更容易。 http://maproutes.codeplex.com/ – 2011-06-02 15:40:13

相關問題