如何在 asp.net web api 中传递参数名称 "action"
how to pass parameter name "action" in asp.net web api
无法在 asp.net web api 2.0.api 中通过 url 发送参数名称 "action"。
示例:
如果你这样做:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{action}",
defaults: new
{
action=RouteParameter.Optional
}
);
控制器中的方法:
public HttpResponseMessage Get(int action)
{
return ResponseXml();
}
给出错误信息:
in the dictionary path name of the parameter "action" is contained in
the URL-address more than once
如何将参数名称 "action" 作为参数而不是操作方法传递?
谢谢
由于name action包含在querystring部分(?action=2),所以不需要改变route map。框架会将值绑定到操作方法中的操作参数。移除 routeTemplate 中多余的 {action}。由于您的 url 格式不包含 {action} host:port/controller_name?action=2&login=,请从路线图中删除 {action}。
因此,您的路线图将是
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new
{
id=RouteParameter.Optional
}
);
您可以尝试使用 Attribute Routing 并将其包含在路线模板中。
//GET [controller_route]/2
[HttpGet]
[Route("{action:int}")]
public HttpResponseMessage Get(int action)
{
return ResponseXml();
}
这将使您可以使用以下 url
http://host:port/controller_name/2
其中 action
参数将映射到 2
。
记得在配置时启用属性路由。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
无法在 asp.net web api 2.0.api 中通过 url 发送参数名称 "action"。
示例:
如果你这样做:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{action}",
defaults: new
{
action=RouteParameter.Optional
}
);
控制器中的方法:
public HttpResponseMessage Get(int action)
{
return ResponseXml();
}
给出错误信息:
in the dictionary path name of the parameter "action" is contained in the URL-address more than once
如何将参数名称 "action" 作为参数而不是操作方法传递?
谢谢
由于name action包含在querystring部分(?action=2),所以不需要改变route map。框架会将值绑定到操作方法中的操作参数。移除 routeTemplate 中多余的 {action}。由于您的 url 格式不包含 {action} host:port/controller_name?action=2&login=,请从路线图中删除 {action}。 因此,您的路线图将是
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new
{
id=RouteParameter.Optional
}
);
您可以尝试使用 Attribute Routing 并将其包含在路线模板中。
//GET [controller_route]/2
[HttpGet]
[Route("{action:int}")]
public HttpResponseMessage Get(int action)
{
return ResponseXml();
}
这将使您可以使用以下 url
http://host:port/controller_name/2
其中 action
参数将映射到 2
。
记得在配置时启用属性路由。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}