Asp.net mvc 4 mvc4 web api路由表

Asp.net mvc 4 mvc4 web api路由表,asp.net-mvc-4,asp.net-web-api-routing,Asp.net Mvc 4,Asp.net Web Api Routing,我希望像这样访问资源: /api/adddevice/12345 这条路线有什么错误 routes.MapRoute( name: "AddDevice", url: "adddevice/{id}", defaults: new { controller = "some controller", action = "adddevice", id = UrlParameter.Optional }

我希望像这样访问资源:

     /api/adddevice/12345
这条路线有什么错误

    routes.MapRoute(
            name: "AddDevice",
            url: "adddevice/{id}",
            defaults: new { controller = "some controller", action = "adddevice", id = UrlParameter.Optional }
    );


    public string AddDevice(int id)
    {
        return "Device " + id.ToString() + " succesfully added";
    }
编辑

以下是错误详细信息:

     <MessageDetail>
        No type was found that matches the controller named 'some controller'.
     </MessageDetail>

找不到与名为“some controller”的控制器匹配的类型。

您在路由中遗漏了“api”,并且您似乎正在使用MVC路由

注意:这需要添加到WebApiConfig,而不是RouteConfig:

config.Routes.MapHttpRoute(
                name: "AddDevice",
                routeTemplate: "api/adddevice/{id}",
                defaults: new { controller = "somecontroller", action = "adddevice", id = UrlParameter.Optional }
                );

您错过了路由中的“api”,并且您似乎正在使用MVC路由

注意:这需要添加到WebApiConfig,而不是RouteConfig:

config.Routes.MapHttpRoute(
                name: "AddDevice",
                routeTemplate: "api/adddevice/{id}",
                defaults: new { controller = "somecontroller", action = "adddevice", id = UrlParameter.Optional }
                );

您说您希望url如下所示:

/api/adddevice/12345
但您的路线图具有以下特点:

url: "adddevice/{id}",
看看怎么不匹配?映射在开始时没有
api/
MapRoute()
调用中声明的URL必须匹配所有URL(当然,主机部分除外)。从正在键入的URL中删除
/api/
,或将其添加到正在映射的URL中


顺便说一句,
routes.MapRoute()
用于MVC;对于WebApi,您希望
config.Routes.MapHttpRoute()

您说您希望url如下:

/api/adddevice/12345
但您的路线图具有以下特点:

url: "adddevice/{id}",
看看怎么不匹配?映射在开始时没有
api/
MapRoute()
调用中声明的URL必须匹配所有URL(当然,主机部分除外)。从正在键入的URL中删除
/api/
,或将其添加到正在映射的URL中


顺便说一句,
routes.MapRoute()
用于MVC;对于WebApi,您需要的
config.Routes.MapHttpRoute()

对我来说不起作用。。。。这里我不使用[api]:routes.MapRoute(名称:“Default”,url:“{controller}/{action}/{id}”,默认值:new{controller=“PDF”,action=“GetServiceInfo”,id=UrlParameter.Optional});这对我来说是行不通的。。。。这里我不使用[api]:routes.MapRoute(名称:“Default”,url:“{controller}/{action}/{id}”,默认值:new{controller=“PDF”,action=“GetServiceInfo”,id=UrlParameter.Optional});我希望mvc框架在默认情况下添加了[api]以将api控制器与通常的api控制器分开——让我惊讶的是,当我将[api]附加到这个sheme:url中的请求url时,action metod不可用:“adddevice/{id}”我不确定这是为什么;URL根本不匹配。它们甚至没有相同数量的元素。您正在键入以“api”开头的内容,而路由映射正在查找以“adddevice”开头的内容。很简单。“api”!=“adddevice”。我理解。此行为是针对sheme{controller}{action}/api/controller/action/44我希望mvc框架在默认情况下添加了[api]以将api控制器与通常的api控制器分开——让我惊讶的是,当我将[api]添加到这个sheme中的请求url时,action metod不可用:url:“adddevice/{id}”我不确定这是为什么;URL根本不匹配。它们甚至没有相同数量的元素。您正在键入以“api”开头的内容,而路由映射正在查找以“adddevice”开头的内容。很简单。“api”!=“adddevice”。我理解。此行为是针对sheme{controller}{action}/api/controller/action/44