wake-up-neo.net

So erhalten Sie GET-Parameter mit ASP.NET MVC ApiController

Ich fühle mich etwas absurd, wenn ich dies frage, aber ich finde keine Möglichkeit, Parameter für eine Abrufanforderung unter /api/foo?sort=name zu erhalten.

In der ApiController-Klasse habe ich eine public string Get() gegeben. Das Setzen von Get(string sort) macht /api/foo zu einer fehlerhaften Anfrage. Die Anforderungsinstanz in der Variablen ApiController hat den Typ System.Net.Http.HttpRequestMessage. Es hat keine QueryString- oder Parameters-Eigenschaft oder nichts. 

24
xster

Du könntest es einfach gebrauchen

HttpContext.Current.Request.QueryString
17
Josh Mouch

Der ApiController ist so konzipiert, dass er ohne das HttpContext-Objekt funktioniert (wodurch es portierbar ist und es außerhalb von IIS gehostet werden kann).

Sie können weiterhin auf die Parameter für die Abfragezeichenfolge zugreifen, dies geschieht jedoch über die folgende Eigenschaft:

Request.GetQueryNameValuePairs()

Hier ist eine Beispielschleife durch alle Werte:

foreach (var parameter in Request.GetQueryNameValuePairs())
{
     var key = parameter.Key;
     var value = parameter.Value;
}
25
Darren

Hier ein Beispiel, in dem die Abfragescheibe q aus der Anforderung abgerufen und zur Abfrage von Konten verwendet wird:

        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");
        }

Das kann dann so aufgerufen werden:

url/api/Konten? q = p

6
Mark

Holen Sie sich alle Querystring-Name/Wert-Paare in eine Variable:

IEnumerable<KeyValuePair<string, string>> queryString = request.GetQueryNameValuePairs();

Dann extrahieren Sie einen angegebenen Querystring-Parameter

string value = queryString.Where(nv => nv.Key == "parameterNameGoesHere").Select(nv => nv.Value).FirstOrDefault();
3
Chris Halcrow

wenn wir ein passendes Modell für diese Anfrage haben 

zum Beispiel 

  public class JustModel 
    {
      public int Id {get;set;}
      public int Age {gets;set;}
    }

und Abfrage wie folgt 

/api/foo?id=1&Age=10

Sie können einfach das [FromUri]-Attribut verwenden

Zum Beispiel 

public IHttpActionResult GetAge([FromUri] JustModel model){}
0
So_oP

Sie versuchen, einen OData-Webservice zu erstellen? Wenn ja, geben Sie einfach eine IQueryable zurück, und die Web-API erledigt den Rest.

0
Leon Cullens

Sie können auch Folgendes verwenden

var value = request.GetQueryNameValuePairs().Where(m => m.Key == "paramName").SingleOrDefault().Value;
0
Khateeb321