2013-10-12 88 views
0

我对微风很新颖。我已经下载了AngularBreeze的模板,并试图创建一个示例应用程序,但我卡在Breeze WebApi控制器上。使用breeze和WebApi获取System.InvalidOperationException异常

BreezeController] 
public class ProductsBreezeController : ApiController 
{ 
    private readonly ProductRepository context; 

    public ProductsBreezeController() 
    { 
     context = new ProductRepository(); 
    } 

    [HttpGet] 
    public string Metadata() 
    { 
     return context.Metadata(); 
    } 

    //// GET api/productsbreeze 
    public IQueryable<Product> GetAllProducts() 
    { 
     return context.TodoLists; 
    } 
} 

public class ProductRepository : EFContextProvider<SampleEntities> 
{ 
    public DbQuery<Product> TodoLists 
    { 
     get { return Context.Products; } 
    } 
} 

异常消息

多个动作被发现与请求匹配的:System.String元数据()上型AngularWebApi.ApiControllers.ProductsBreezeController System.Linq.IQueryable`1 [AngularWebApi.DataAccess.Model 。产品]上式AngularWebApi.ApiControllers.ProductsBreezeController GetAllProducts()

ExceptionType: “System.InvalidOperationException”

回答

0

您需要将您的breezewebapiconfig.cs设置为接受操作参数。目前你只有一个控制器可能。

打开AppStart的文件夹,并BreezeWebApiConfig.cs并添加有(应该看到类似) -

Breeze/{controller}/{action}/{id} 

而且你需要在那里

添加动作部分编辑

在你的问题中,它清楚地显示了该控制器操作的路由是api/productsbreeze。如果这是你正在击中的路线,那么你需要调整该路线以接受一个动作。如果你想打,然后在行动

//// GET api/productsbreeze 
[HttpGet] 
public IQueryable<Product> GetAllProducts() 
{ 
    return context.TodoLists; 
} 

你需要确保你的BreezeWebApiConfig也被登记在Global.asax,当然添加HTTPGET控制器属性微风路线。

+0

我补充说,但仍是同样的错误'公共静态类BreezeWebApiConfig { 公共静态无效RegisterBreezePreStart() { GlobalConfiguration.Configuration.Routes.MapHttpRoute(“Bre ezeApi“,”微风/ {控制器}/{动作}“ ); GlobalConfiguration.Configuration.Routes.MapHttpRoute(“BreezeDefaultApi”,“api/{controller}/{id}”,new {id = RouteParameter.Optional} ); } }' –

+0

您的默认路线并未在您发布的代码 –

+0

中更改,那么应该在那里? –

0

请求URL应与Breeze Api配置相匹配。

服务器端配置

GlobalConfiguration.Configuration.Routes.MapHttpRoute("BreezeApi", "breeze/{controller}/{action}"); 

客户端

var manager = new breeze.EntityManager("/breeze/ProductsBreeze"); 
相关问题