C# 设置WebApi 2路由
我对WepApi2和创建restfull Web服务相当陌生,但我掌握了其中的大部分诀窍 最近,我开始开发一个新的WebApi2,在这里我遇到一些查询需要一些不可容纳的字符,特别是斜杠和倒斜杠字符 我在这里读了一些关于这个问题的教程和问题,但是没有一个能满足我的要求,所以我最终像这样设置了我的api查询C# 设置WebApi 2路由,c#,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,我对WepApi2和创建restfull Web服务相当陌生,但我掌握了其中的大部分诀窍 最近,我开始开发一个新的WebApi2,在这里我遇到一些查询需要一些不可容纳的字符,特别是斜杠和倒斜杠字符 我在这里读了一些关于这个问题的教程和问题,但是没有一个能满足我的要求,所以我最终像这样设置了我的api查询 http://host/controler/action/?param1=x¶m2=y 一切都很完美。我必须为我的动作设置ActionName和Route属性,这没有问题,但有
http://host/controler/action/?param1=x¶m2=y
一切都很完美。我必须为我的动作设置ActionName
和Route
属性,这没有问题,但有一次我尝试了旧的查询方式
http://host/controller/action/x/y
我总是会得到一个在控制器“controller”上找不到与请求匹配的操作。
这是我的路线配置
// Web API configuration and services
config.MapHttpAttributeRoutes();
// Web API routes
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { controller = "HelloWorld", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Config1",
routeTemplate: "{controller}/{action}/{param1}/{param2}/{param3}",
defaults: new { controller = "Controller", action = "action", param2 = RouteParameter.Optional, param3 = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Config2",
routeTemplate: "{controller}/{param1}/{param2}/{param3}",
defaults: new { controller = "action", param3 = RouteParameter.Optional }
);
您可能会注意到我有两种配置。第一种方法是将动作分类到一个控制器下,因此,将来可以添加更多具有特定动作的控制器,而不是拥有一个具有特定动作的控制器的庞大列表,但是第二种方法是客户机想要的
那么,有没有办法让这两种方式共同工作
编辑:我的坏,我忘了显示我的控制器和操作是如何安装的
public class ControllerController : WebApiController
{
[Route("Controller/action1/")]
[ActionName("action1")]
[HttpGet()]
public Object action1(string param1, string param2)
{
// do action actions code
return result;
}
如您所见,除了在配置中设置路由外,我还设置了操作路由属性,但我不知道我可以设置多个路由属性。我会试试,然后回来报到 您可以尝试改用:
您可以尝试改用:
在这种情况下,我建议改为基于属性的路由,而不是字符串路由。属性路由允许您在控制器类中分配规则,而不是在基于字符串匹配的单独路由配置中,并且在处理路由组合时更加健壮。哦,忘了提了,请看我的编辑!在这种情况下,我建议改为基于属性的路由,而不是字符串路由。属性路由允许您在控制器类中分配规则,而不是在基于字符串匹配的单独路由配置中,并且在处理路由组合时更加健壮。哦,忘了提了,请看我的编辑!哦,这样我就可以两全其美了?我已经有属性路由,请看我的编辑,但我不知道它支持超过1个设置哦,所以我可以设置两种方式?我已经有属性路由,请看我的编辑,但我不知道它支持超过1个设置
// in your startup configuration:
config.MapHttpAttributeRoutes();
// and your controller:
[RoutePrefix("foo")]
public class FooController
{
[HttpGet]
[Route("bar/{param1}/{param2}")]
[Route("bar")
public IHttpActionResult GetBar(string param1, string param2)
{
// ...
}
}