gpt4 book ai didi

asp.net-web-api - 具有相同名称的多个参数

转载 作者:行者123 更新时间:2023-12-03 23:28:04 26 4
gpt4 key购买 nike

考虑以下 ApiController:

public class SomeController : ApiController
{
[HttpGet]
public class SomeFunction(int someVal = 0) {
...
}
}

这按预期工作:

http://myserver/myApp/Some/SomeFunction?someVal=0

但是当调用这个函数时我遇到了问题

http://myserver/myApp/Some/SomeFunction?someVal=0&someVal=0

现在我试图了解当时和那里发生的事情。我没有收到任何错误消息,但函数的输出与预期不同。

最佳答案

Web API 参数绑定(bind)无法将查询字符串中的多个参数转换为数组,因此您必须有两个选择:

第二个选项包括获取查询字符串名称-值对,并自行解析它们。要获取名称值对,请使用:

Request.GetQueryNameValuePairs()

要提取 int 值,您可以这样做:

var values= Request.GetQueryNameValuePairs()
.Where(kvp => kvp.Key == "someVal")
.Select(kvp => int.Parse(kvp.Value))
.ToArray();

当然,你应该控制解析等方面的错误。这是一个基本的示例代码。

这是第一个选项的模型绑定(bind)器的实现:

public class IntsModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof (Ints))
{
return false;
}
var intValues = actionContext.Request.GetQueryNameValuePairs()
.Where(kvp => kvp.Key == bindingContext.ModelName)
.Select(kvp => int.Parse(kvp.Value))
.ToList();
bindingContext.Model = new Ints {Values = intValues};
return true;
}
}

同样,这是一个基本的实现,除其他外,缺乏对错误的控制。

这是在 Action 中使用它的方法之一,但是,请阅读参数绑定(bind)上的链接以查看其他(更好的)使用它的方法:

// GET api/Test?keys=1&keys=7
public string Get([ModelBinder(typeof(IntsModelBinder))]Ints keys)
{
return string.Format("Keys: {0}", string.Join(", ", keys.Values));
}

关于asp.net-web-api - 具有相同名称的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com