cod*_*fun 42 routing query-string asp.net-web-api
我正在使用Asp.net Web Api生成的默认模板.我正在使用Get()部分:
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我认为访问查询字符串的唯一方法就是创建一个输入字符串变量.所以我创建了另一个函数(我做的唯一更改)到生成的默认控制器:
public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
Run Code Online (Sandbox Code Playgroud)
我在两种方法中都设置了一个断点,但即使我添加一个查询字符串,它总是会转到没有参数的函数.所以,如果我去http://mybaseurl/api/values?foo=f
它仍然是Get()而不是get(string queryString).它不像我想的那样工作吗?我知道我可以使用Get()函数访问查询字符串Request.RequestUri.ParseQueryString();但是如果可能的话我更喜欢将它分开.
Toh*_*hid 57
尽管@Kiran Challa的回答是正确的,但您可能更倾向于直接从URL 获取URL参数.在这些情况下,试试这个:
using System.Net.Http;
var allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();
string p1Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p1").Value;
string p2Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p2").Value;
string p3Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p3").Value;
Run Code Online (Sandbox Code Playgroud)
现在对于以下URL,p1Val将为"Apple",p2Val将为"Banana",p3Val将为null.
.../api/myController?p1=Apple&p2=Banana
Run Code Online (Sandbox Code Playgroud)
感谢您的建议,现在,此测试的源代码在GitHub中 ,它也可以在Azure上运行并进行测试:
Kir*_*lla 41
查询字符串键名称应与操作的参数名称匹配:
/ API /值?的queryString = F
public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48440 次 |
| 最近记录: |