![](/img/trans.png)
[英]How to get the URL of the Action without parameters in ASP.NET MVC
[英]How to get GET parameters with ASP.NET MVC ApiController
我覺得問這個有點荒謬,但我找不到一種方法來獲取獲取請求的參數,例如/api/foo?sort=name
。
在ApiController
類中,我提供了一個public string Get()
。 放置Get(string sort)
會使/api/foo
成為一個錯誤的請求。 ApiController
中的請求實例是System.Net.Http.HttpRequestMessage
類型。 它沒有QueryString
或Parameters
屬性或任何東西。
ApiController 旨在在沒有 HttpContext 對象的情況下工作(使其可移植,並允許它在 IIS 之外托管)。
您仍然可以訪問查詢字符串參數,但它是通過以下屬性完成的:
Request.GetQueryNameValuePairs()
這是遍歷所有值的示例:
foreach (var parameter in Request.GetQueryNameValuePairs())
{
var key = parameter.Key;
var value = parameter.Value;
}
你可以用
HttpContext.Current.Request.QueryString
這是一個從請求中獲取查詢字符串 q 並使用它來查詢帳戶的示例:
var q = Request.GetQueryNameValuePairs().Where(nv => nv.Key =="q").Select(nv => nv.Value).FirstOrDefault();
if (q != null && q != string.Empty)
{
var result = accounts.Where(a=>a.Name.ToLower().StartsWith(q.ToLower()));
return result;
}
else
{
throw new Exception("Please specify a search query");
}
這可以像這樣調用:
url/api/賬戶?q=p
將所有查詢字符串名稱/值對放入一個變量中:
IEnumerable<KeyValuePair<string, string>> queryString = request.GetQueryNameValuePairs();
然后提取指定的查詢字符串參數
string value = queryString.Where(nv => nv.Key == "parameterNameGoesHere").Select(nv => nv.Value).FirstOrDefault();
您還可以使用以下
var value = request.GetQueryNameValuePairs().Where(m => m.Key == "paramName").SingleOrDefault().Value;
您正在嘗試構建 OData 網絡服務? 如果是這樣,只需返回一個 IQueryable,Web API 將完成剩下的工作。
如果我們有適合該請求的模型
例如
public class JustModel
{
public int Id {get;set;}
public int Age {gets;set;}
}
並像這樣查詢
/api/foo?id=1&Age=10
你可以只使用[FromUri]
屬性
例如
public IHttpActionResult GetAge([FromUri] JustModel model){}
添加默認值可以完成以下工作:
public string Get(string sort="")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.