2013-08-21 157 views
0

我一直在試圖實現大衛海登的果園CMS和ASP .NET Web API http://www.davidhayden.me/blog/orchard-cms-and-asp.net-web-api,但我遇到了問題,基本上得到一個頁面找不到。果園cms apicontroller,返回xml

這是我有:

在我的控制器

ContactViewModel.cs

namespace Sunkist.ContactManager.Controllers 
{ 
public class ContactsController : ApiController 
{ 
    private readonly IContentManager _contentManager; 

    public ContactsController(IContentManager contentManager) 
    { 
     _contentManager = contentManager; 
    } 

    public IEnumerable<ContactViewModel> Get() 
    { 
     return _contentManager 
      .Query(VersionOptions.Published, "Contact") 
      .List() 
      .Select(c => new ContactViewModel(c)); 
    } 

    public ContactViewModel Get(int id) 
    { 
     var contact = _contentManager.Get(id); 

     if (contact == null) 
      throw new HttpResponseException 
       (new HttpResponseMessage(HttpStatusCode.NotFound)); 

     return new ContactViewModel(contact); 
    } 
} 
} 

視圖模型文件夾 ViewModel.cs

namespace Sunkist.ContactManager.ViewModel 
{ 
    public class ContactViewModel 
    { 
    private Orchard.ContentManagement.ContentItem c; 

    public ContactViewModel(Orchard.ContentManagement.ContentItem c) 
    { 
     // TODO: Complete member initialization 
     this.c = c; 
    } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    } 
} 

和遷移

namespace Sunkist.ContactManager { 
    public class Migrations : DataMigrationImpl { 

    public int Create() { 
     // Creating table ContactRecord 
     SchemaBuilder.CreateTable("ContactRecord", table => table 
      .ContentPartRecord() 
      .Column("Name", DbType.String) 
      .Column("Address", DbType.String) 
      .Column("City", DbType.String) 
     ); 

     return 1; 
    } 
    } 
} 

我是新來的果園和.Net MVC,所以我不知道我在做什麼錯了?

+0

你會得到一個404,當你去哪裏? –

+0

當我嘗試點擊該頁面時:http:// localhost:30321/OrchardLocal/api/sunkist.contactmanager/contacts – jmorrissette

+0

您確定這是您的操作的正確網址嗎?您是否創建了自定義路線? 「api」部分來自哪裏?根據您鏈接的文章,如果您創建了該路線,它應該是/ api/contacts。 –

回答

0

仔細檢查包含Web API控制器的模塊的名稱。

通過VS GUI,我創建了一個新的web api控制器類「TestController.cs」,並找不到正確的端點url。

也就是說,直到我看到項目中的Module.txt,我添加了控制器。該項目是「Orchard.Users」,但Module.txt文件中的名稱只是「用戶」。

我能夠擊中「http://example.com/api/users/test」的終點。

值得注意的是:我在「.../UsersApi」設置了一個路由,但'自動魔術'URL模式仍然有效。下面的代碼。此外,我後來添加了一個新模塊來包含我的api控制器,直到我在儀表板中啓用該模塊纔會工作。

TestController.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 

namespace Orchard.Users.Controllers 
{ 
    public class TestController : ApiController 
    { 
     // GET api/<controller> 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     // GET api/<controller>/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

     // POST api/<controller> 
     public void Post([FromBody]string value) 
     { 
     } 

     // PUT api/<controller>/5 
     public void Put(int id, [FromBody]string value) 
     { 
     } 

     // DELETE api/<controller>/5 
     public void Delete(int id) 
     { 
     } 
    } 
} 

HttpRoutes.cs

using System.Collections.Generic; 
using Orchard.Mvc.Routes; 
using Orchard.WebApi.Routes; 

public class HttpRoutes : IHttpRouteProvider 
{ 

    public void GetRoutes(ICollection<RouteDescriptor> routes) 
    { 
     foreach (RouteDescriptor routeDescriptor in GetRoutes()) 
     { 
      routes.Add(routeDescriptor); 
     } 
    } 

    public IEnumerable<RouteDescriptor> GetRoutes() 
    { 
     return new[] { 
       new HttpRouteDescriptor { 
        Name = "UsersApi", 
        Priority = -10, 
        RouteTemplate = "usersapi/{id}", 
        Defaults = new { 
         area = "Orchard.Users", 
         controller = "Test", 
         id = RouteParameter.Optional 
        }, 
       } 
      }; 
     } 
    }