2

我正在研究ASP.Net Core 1.1 Web API。我有一个ServiceTypeCode控制器,如下所示;为什么不在我的ASP.Net Core 1.1控制器动作中运行

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

    } 

如果我使用的网址...

http://localhost:5000/api/servicetypecodes 

与GET动词邮递员,我得到的服务类型代码列表,符合市场预期。但是,如果我尝试在

if (string.IsNullOrEmpty(a_query)) 

位置添加任何东西作为查询字符串,如...

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

,并在我的代码中设置断点,a_query的值是零,而不是的预期“mailclasscode = fc”

我在这里错过了什么?

在此先感谢您的帮助。

+1

字符串变量它期待必须的名称和你发送的一样:a_query - > mailclasscode – Terrance00

+0

Terrance - OK,那么如果我想让用户使用http:// localhost:5000/api/servicetypecodes?mailclasscode = fc或http:// localhost: 5000/api/servicetypecodes?stc = 123,这取决于它们是否通过mailclasscode或stc过滤,那么我需要有 public IActionResult Get([FromQuery] string mailclasscode,[FromQuery string stc) 是否正确? – EiEiGuy

+0

工作。谢谢Terrance。如果你想发布一个答案,我很乐意将其标记为正确的,以便你获得信任。 – EiEiGuy

回答

5

.Net核心控制器方法的变量名称必须与您发送的相同。

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

如果使用URL来传递数据的控制器方法必须是这样的:

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

,反之亦然。

祝你好运 - 快乐编码。

0

您可以将查询字符串名称与方法中的变量名称不同。你必须让.NetCore知道如何在代码中定义它像这样(用你的变量名):

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

或更一般地:

[HttpGet] 
public IActionResult Get([FromQuery(Name = "myQueryStringParamName")] string myCodeParamName) 
{ 
    ... 
} 
相关问题