2015-05-13 159 views
0

我想用在我的控制器以下几点:REST API路由

[Route("api/{controller}/{action}")] 

而不是使用RouteTable.Routes.MapHttpRoute(...)。问题是它说Route不是属性类。我已经包括以下库:

using System.Web.Http; 
using System.Web.Http.Description; 
using System.Web.Http.Controllers; 
using System.Web.Routing; 
using AttributeRouting.Web.Http; 
using System.Web.Mvc; 

我有Microsoft.Aspnet.Mvc 5.2.3Web API 2.2。我试图按照这种http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx并添加

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapMvcAttributeRoutes(); 
    } 
} 

,但它说,IgnoreRouteMapMvcAttributeRoutes不存在..我在做什么错? 感谢

+0

'System.Web.Mvc'和'System.Web.Http'命名空间都有属性'Route'。尝试删除对'System.Web.Mvc'的引用或'RouteAttribute'的显式名称空间 – Zen

+0

如上所述,尝试将[System.Web.HttpRoute(“api/{controller}/{action}”)]显式引用它正确的命名空间。 – nik0lias

回答

0

在网页API,你可以使用属性RoutePrefix,作为前缀适用于所有的控制器动作

你可以这样做:

[RoutePrefix("api/apps")] 
public class ApplicationsController : ApiController{ 

     [Route("get/{id}"))] 
     public async Task<IHttpActionResult>GetApplications(int id) 
+0

是的,我也有routeprefix ..但它又说它不是一个属性类.. – ayasha

+0

如果您使用的webapi路由,你应该添加在你的webapiconfig文件中,在注册方法下调用 'config.MapHttpAttributeRoutes );” –

+0

你的意思是哪个电话? – ayasha

0

我刚刚创建了一个快速测试项目使用Mvc 5.2.2。在你的控制器,你只需要

using System.Web.Mvc; 

对于RouteAttribute并在RouteConfig只有

using System.Web.Mvc; 
using System.Web.Routing; 

using System.Web.Http;using AttributeRouting.Web.Http;的概率只是混乱的局面(不知道是什么库AttributeRouting.Web.Http是从或者这是一个错字?)。您的WebApi配置应该在不同的类中完成。另外请确保你有System.Web.Mvc.dll引用,以防万一

+0

是的,也许问题是,我有一个名称空间WebForms,我不知道是否我应该在命名空间或外部添加使用System ..如果我添加使用System.Web.Mvc;里面的命名空间一切都搞砸了...... – ayasha

+0

搞砸了怎么样?您可以在名称空间内部或外部添加'使用'。但是WebForms的命名空间与上面的代码有什么关系?你是否应该发布更多的代码?这个问题涉及您需要使用System.Web.Mvc并在名称空间声明内部或外部使用System.Web.Routing的RouteConfig类 –