【发布时间】:2017-12-12 01:31:44
【问题描述】:
我正在开发 ASP.Net Core 1.1 Web API。我有一个如下所示的 ServiceTypeCode 控制器;
[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 动词的 PostMan 中,我得到了服务类型代码的列表,正如预期的那样。但是,如果我尝试添加任何内容作为查询字符串,例如 ...
http://localhost:5000/api/servicetypecodes?mailclasscode=fc
并在我的代码中设置断点
if (string.IsNullOrEmpty(a_query))
位置,a_query 的值为 null 而不是预期的“mailclasscode=fc”
我在这里错过了什么?
提前感谢您的帮助。
【问题讨论】:
-
它所期望的字符串变量的名称必须与您发送的相同:a_query -> mailclasscode
-
Terrance - 好的,那么如果我想让用户使用 localhost:5000/api/servicetypecodes?mailclasscode=fc 或 localhost:5000/api/servicetypecodes?stc=123,这取决于他们是通过 mailclasscode 还是 stc 过滤,那么我需要公共 IActionResult Get ([FromQuery] string mailclasscode, [FromQuery string stc) 对吗?
-
那行得通。谢谢特伦斯。如果您想发布答案,我很乐意将其标记为正确,以便您获得信用。
标签: asp.net-core-webapi request.querystring asp.net-core-1.1