2

Ich arbeite an einer ASP.Net Core 1.1-Web-API. Ich habe einen ServiceTypeCode-Controller wie unten gezeigt;Warum funktioniert FromQuery nicht in meiner ASP.Net Core 1.1-Controller-Aktion?

[Produces("application/json")] 
[Route("api/[controller]")] 
public class ServiceTypeCodeController : Controller 
{ 
    ... 
    ... 
    ... 


    [HttpGet] 
    public IActionResult Get([FromQuery] string a_query) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(a_query)) 
      { 
       OperationResult<List<ServiceTypeCode>, string> result = m_bl.GetAllServiceTypeCodes(); 
       if (result.Success && result.Result.Count > 0) 
       { 
        return Ok(JsonConvert.SerializeObject(result.Result)); 
       } 
      } else 
      { 
       // Deserialize query into dictionary of strings and StringValues 
       var query = QueryHelpers.ParseQuery(a_query.ToLower()); 

       if (query.TryGetValue("mailclasscode", out var mailClassCode)) 
       { 
        if (!string.IsNullOrEmpty(mailClassCode)) 
        { 
         OperationResult<List<ServiceTypeCode>, string> result = m_bl.GetAllServiceTypeCodes(mailClassCode); 
         if (result.Success && result.Result.Count > 0) 
         { 
          return Ok(JsonConvert.SerializeObject(result.Result)); 
         } 
        } 
       } 
       if (query.TryGetValue("stc", out var stc)) 
       { 
        if (!string.IsNullOrEmpty(stc)) 
        { 
         OperationResult<ServiceTypeCode, string> result = m_bl.GetServiceTypeCode(stc); 
         if (result.Success) 
         { 
          return Ok(JsonConvert.SerializeObject(result.Result)); 
         } 
        } 
       } 
      } 
      return NotFound(); 
     } 
     catch (Exception ex) 
     { 
      string msg = "An exception occurred while trying to get a list of ServiceTypeCodes from the database."; 
      m_logger.LogError(1, ex, msg); 
      ApiError error = BuildError("Server Error - Exception", "500", "Get", ex, msg); 
      return Ok(JsonConvert.SerializeObject(error)); 
     } 

    } 

Wenn ich die URL verwenden ...

http://localhost:5000/api/servicetypecodes 

in PostMan mit dem Verb GET, erhalte ich die Liste der Typencodes Service, wie erwartet. Wenn ich jedoch versuchen, etwas als Query-String hinzuzufügen, wie ...

http://localhost:5000/api/servicetypecodes?mailclasscode=fc 

und einen Haltepunkt in meinem Code festgelegt am

if (string.IsNullOrEmpty(a_query)) 

Lage, ist der Wert von a_query null statt des erwarteten "mailclasscode = fc"

Was fehlt mir hier?

Vielen Dank im Voraus für jede Hilfe.

+1

Der Name des String-Variable wird erwartet, muss sein das selbe wie das, das du sendest: a_query -> mailclasscode – Terrance00

+0

Terrance - OK, also wenn ich möchte, dass der Benutzer http: // localhost: 5000/api/servicetypecodes? mailclasscode = fc oder http: // localhost verwendet: 5000/api/servicetypecodes? Stc = 123, je nachdem, ob sie nach mailclasscode oder stc filtern, dann müsste ich public IActionResult Get ([FromQuery] string) haben mailclasscode, [FromQuery string stc] ist das richtig? – EiEiGuy

+0

Das hat funktioniert. Danke Terrance. Wenn Sie eine Antwort posten möchten, würde ich mich freuen, sie als korrekt zu markieren, damit Sie eine Anerkennung erhalten. – EiEiGuy

Antwort

5

Die Variablennamen der .Net Core Controller-Methode müssen mit denen übereinstimmen, die Sie senden.

http://localhost:5000/api/servicetypecodes?mailclasscode=fc 

Wenn diese URL unter Verwendung von Daten der Controller-Methode übergeben wird so aussehen müssen:

[HttpGet] 
public IActionResult Get([FromQuery] string mailclasscode) 
{...} 

Oder umgekehrt.

Viel Glück - glückliche Kodierung.

0

Sie können den Namen der Abfragezeichenfolge von dem Variablennamen in der Methode abweichen lassen. Sie haben zu lassen .NetCore wissen, wie, indem sie es in Code wie so definieren (Ihre Variablennamen):

[HttpGet] 
public IActionResult Get([FromQuery(Name = "mailclasscode")] string a_query) 
{ 
    ... 
} 

oder allgemeiner:

[HttpGet] 
public IActionResult Get([FromQuery(Name = "myQueryStringParamName")] string myCodeParamName) 
{ 
    ... 
} 
Verwandte Themen