为什么 FromQuery 在我的 ASP.Net Core 1.1 控制器操作中不起作用
Why isn't FromQuery working in my ASP.Net Core 1.1 controller action
我正在开发 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));
}
}
如果我使用 url ...
http://localhost:5000/api/servicetypecodes
在 PostMan 中使用 GET 动词,我得到了服务类型代码的列表,正如预期的那样。但是,如果我尝试添加任何内容作为查询字符串,例如 ...
http://localhost:5000/api/servicetypecodes?mailclasscode=fc
并在我的代码中的
处设置一个断点
if (string.IsNullOrEmpty(a_query))
location,a_query 的值为 null 而不是预期的 "mailclasscode=fc"
我在这里错过了什么?
在此先感谢您的帮助。
.Net Core Controller Method 的变量名必须与您发送的相同。
http://localhost:5000/api/servicetypecodes?mailclasscode=fc
如果使用 url 传递数据,控制器方法必须如下所示:
[HttpGet]
public IActionResult Get([FromQuery] string mailclasscode)
{...}
反之亦然。
祝你好运 - 编码愉快。
您可以使查询字符串名称与方法中的变量名称不同。你必须让 .NetCore 知道如何通过在代码中定义它(使用你的变量名):
[HttpGet]
public IActionResult Get([FromQuery(Name = "mailclasscode")] string a_query)
{
...
}
或更一般地说:
[HttpGet]
public IActionResult Get([FromQuery(Name = "myQueryStringParamName")] string myCodeParamName)
{
...
}
我正在开发 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));
}
}
如果我使用 url ...
http://localhost:5000/api/servicetypecodes
在 PostMan 中使用 GET 动词,我得到了服务类型代码的列表,正如预期的那样。但是,如果我尝试添加任何内容作为查询字符串,例如 ...
http://localhost:5000/api/servicetypecodes?mailclasscode=fc
并在我的代码中的
处设置一个断点if (string.IsNullOrEmpty(a_query))
location,a_query 的值为 null 而不是预期的 "mailclasscode=fc"
我在这里错过了什么?
在此先感谢您的帮助。
.Net Core Controller Method 的变量名必须与您发送的相同。
http://localhost:5000/api/servicetypecodes?mailclasscode=fc
如果使用 url 传递数据,控制器方法必须如下所示:
[HttpGet]
public IActionResult Get([FromQuery] string mailclasscode)
{...}
反之亦然。
祝你好运 - 编码愉快。
您可以使查询字符串名称与方法中的变量名称不同。你必须让 .NetCore 知道如何通过在代码中定义它(使用你的变量名):
[HttpGet]
public IActionResult Get([FromQuery(Name = "mailclasscode")] string a_query)
{
...
}
或更一般地说:
[HttpGet]
public IActionResult Get([FromQuery(Name = "myQueryStringParamName")] string myCodeParamName)
{
...
}