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.7true

但我不知道如何获得这些值。我可以检查单个方法中是否有特定参数吗? 有人可以帮忙吗?谢谢

【问题讨论】:

据我了解,您想为您的 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&amp;v2=second param&amp;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 控制器

在 ASP.NET MVC 中向控制器传递多个参数;此外,在 LINQ-to-SQL 中生成动态查询

与实体框架 ASP.net MVC 中多个表的可选关系

ASP.NET MVC 5 中的路由可选参数

ASP.NET MVC 2 中带有约束的可选路由参数?

具有 HTML5 模式和 ASP.Net MVC 的 AngularJS 可选 URL 参数