ASP.NET MVC 传递多个可选参数 field=value
Posted
技术标签:
【中文标题】ASP.NET MVC 传递多个可选参数 field=value【英文标题】:ASP.NET MVC Pass multiple optional parameters field=value 【发布时间】:2021-11-05 03:38:01 【问题描述】:我正在尝试将多个参数传递给 GET 方法
[Route("v1/v2/v3/?param")]
public async Task<HttpResponseMessage> GetContent(string param)
来自当前的请求,可能看起来像:
https://localhost:44363/v1/v2/v3/?isFormatSimple=true
或
https://localhost:44363/v1/v2/v3/?vers=v1.2.7&allow=true
首先,我必须从 isFormatSimple
获取值,第二个,v1.2.7
和 true
。
但我不知道如何获得这些值。我可以检查单个方法中是否有特定参数吗? 有人可以帮忙吗?谢谢
【问题讨论】:
据我了解,您想为您的 WEB 应用程序编写一个端点,该端点可以使用 HTTP GET 方法在路由https://localhost:44363/v1/v2/v3
上调用,并且您希望通过 多个(字符串)参数给它。对吗?
@turanszkik 是的
【参考方案1】:
最简单的选择是简单地重载您的 API 控制器方法(每组参数 1 个重载)。然后,当您向其发送请求时,它将确定哪个重载与您的请求格式匹配并使用该重载。 (我在工作中使用过这个,这篇文章也展示了它的用法:https://www.telerik.com/blogs/how-to-pass-multiple-parameters-get-method-aspnet-core-mvc) 示例代码:
[HttpGet ("v1/v2/v3/")]
public async Task<HttpResponseMessage> GetContent([FromQuery] bool isFormatSimple)
// your method
[HttpGet ("v1/v2/v3/")]
public async Task<HttpResponseMessage> GetContent([FromQuery] string version, [FromQuery] bool allow)
// your method
下一个最简单的选择是将参数实际放入您的路由中,而不是放入您的查询中,并且仍然使用重载: 代码:
[HttpGet ("v1/v2/v3/isFormatSimple:bool")]
public async Task<HttpResponseMessage> GetContent([FromRoute] bool isFormatSimple)
// your method
[HttpGet ("v1/v2/v3/version&allow:bool")]
public async Task<HttpResponseMessage> GetContent([FromRoute] string version, [FromRoute] bool allow)
// your method
【讨论】:
【参考方案2】:您可以在下面看到调用 HTTP GET 端点并将多个参数传递给它的两种方式
首先它是一种基本的方法,使用在网络上广泛使用的常规参数:
[HttpGet]
[Route("ParamsInBasicUrlFormat")]
public async Task<string> ParamsInBasicUrlFormat(string v1, string v2, string v3)
return $"v1;v2;v3";
您可以使用以下格式调用它:http://localhost:61652/ParamsInBasicUrlFormat?v1=first param&v2=second param&v3=third param
其次,如果你想在 URL 中传递参数,就像它是路径的一部分:
[HttpGet]
[Route("ParamsInOtherUrlFormat/v1/v2/v3")]
public async Task<string> ParamsInOtherUrlFormat(string v1, string v2, string v3)
return $"v1;v2;v3";
您可以使用以下格式调用它:http://localhost:61652/ParamsInOtherUrlFormat/first/second/third
如果您将something
放在Route 属性 中,则基本思想也必须将其放在方法的输入中。如果在路由属性中没有输入规范,应用程序会以第一个示例所示的方式期望属性。
【讨论】:
【参考方案3】:也许这就是你要找的东西:
[Route("v1/v2/v3/optionalParam?")]
public async Task<HttpResponseMessage> GetContent(string v1, string v2, string v3, string optionalParam)
以及您操作签名中的任何其他参数都将被视为查询字符串。像这样:
[Route("v1/optionalParam?")]
public async Task<HttpResponseMessage> GetContent(string v1, string optionalParam, string queryString)
您的请求将如下所示:
https://localhost:44363/v1/optionalParam?queryString=HelloWorld
【讨论】:
以上是关于ASP.NET MVC 传递多个可选参数 field=value的主要内容,如果未能解决你的问题,请参考以下文章
将多个参数从 ajax post 传递到 asp.net mvc 控制器