同时使用url参数和查询字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同时使用url参数和查询字符串相关的知识,希望对你有一定的参考价值。

我的Products控制器中有两个操作方法。这是我的RouteConfig。

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

这是两个行动及其工作网址。

[HttpGet]
//uri:http://localhost:49964/api/products/product?strKey=1
public IHttpActionResult Product(string strKey)

[HttpPost]
//uri:http://localhost:49964/api/products/product
public IHttpActionResult Product([FromBody] Product product)

但我也想使用下面的网址进行GET。

http://localhost:49964/api/products/product/1

但是web api响应,

The requested resource does not support http method 'GET'.
答案

如果你想保持strKey,将id改为strKey或反过来。

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{action}/{strKey}",
     defaults: new { strKey = RouteParameter.Optional }
);

路由模板需要匹配映射按预期工作的操作。

//GET api/products/product/1
//GET api/products/product?strKey=1
[HttpGet]    
public IHttpActionResult Product(string strKey)

但这意味着此路线中的所有操作都可选择使用strKey作为占位符

以上是关于同时使用url参数和查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

OIDC - 登录 URL 查询字符串中的额外参数

Tornado 下一个查询字符串 URL 参数

如何将查询参数附加到现有 URL?

在 URL 查询参数中使用某些字符时出现 Java 9 HttpClient 异常

怎样从url得到对应的host和domain ?

js获取url的参数