簡體   English   中英

如何使用 ASP.NET MVC ApiController 獲取 GET 參數

[英]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類型。 它沒有QueryStringParameters屬性或任何東西。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM