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,我有一个控制器名为 产品 我有三个动作 产品:接受一个int返回一个模型(类)对象 类别:获取一个字符串,返回模型(类)对象的数组 All:无参数返回模型(类)对象的数组 我尝试的是以下映射 产品->api/products/Product/1 类别->api/产品/类别/酱汁 全部->api/product/All 由于动作名称支持URL结构,所以我尝试了一个通用的路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplat
- 产品:接受一个int返回一个模型(类)对象
- 类别:获取一个字符串,返回模型(类)对象的数组
- All:无参数返回模型(类)对象的数组
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
所有其他功能都正常工作,但当我使用此http://localhost:2271/api/products/category/2
URL
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:2271/api/products/category/2'.
</Message>
<MessageDetail>
No action was found on the controller 'Products' that matches the request.
</MessageDetail>
</Error>
未找到与请求URI名称匹配的HTTP资源http://localhost:2271/api/products/category/2'.
在与请求匹配的控制器“产品”上未找到任何操作。
另一方面,此URLapi/products/category/?cat=abc
&api/products/category?cat=abc
正在运行。。。。。。[cat是我的接收参数名称]
救命啊
另一方面,此URL api/products/category/?cat=abc&
api/产品/类别?cat=abc正在运行
是的,那是对的,它会的,这就是RPC的风格。如果要保持RESTful方式,可以使用以下路由配置:
config.Routes.MapHttpRoute(
name: "ProductById",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ProductByCategory",
routeTemplate: "api/{controller}/category/{cat}"
);
config.Routes.MapHttpRoute(
name: "DefaultByAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您的控制器将如下所示:
public class ProductsController : ApiController
{
// api/products/
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// api/products/5
[HttpGet]
public string Get(int id)
{
return "Product" + id;
}
// api/products/category/fruits
[HttpGet]
public string Category(string cat)
{
return "Product " + cat;
}
}
公共类产品控制器:ApiController
{
//原料药/产品/
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
//api/products/5
[HttpGet]
公共字符串Get(int-id)
{
返回“产品”+id;
}
//原料药/产品/类别/水果
[HttpGet]
公共字符串类别(字符串类别)
{
返回“产品”+cat;
}
}
注意:为了简单起见,我返回了字符串,但我假设您将返回
产品的一个实例
,您可以很容易地更改代码来执行此操作。嘿,谢谢您的回答,请您详细说明它是如何不以RESTful方式维护的,我是RESTAPI新手。很高兴提供帮助。我想。这里提到了RPC。还有其他文档可以更好地解释这一点,但我必须用谷歌搜索它们:)