强制 Http Get 接受带参数或不带参数的请求
Force Http Get to accept requests either with or without parameters
考虑控制器:
public class EmployeeController : ApiController
{
// https://localhost:44344/api/employee/:profession
[HttpGet]
[Route("api/employee/{profession}")]
public HttpResponseMessage Get(String profession)
{
try
{
var someBigList = ...
/// ... do some stuff
return Request.CreateResponse(HttpStatusCode.OK, someBigList );
}
catch (Exception e)
{
// error
}
}
}
控制器接受以下形式的请求:
https://localhost:44344/api/employee/:profession
但是当我尝试
https://localhost:44344/api/employee
没有。
我们如何修复 GET 请求以接受两者?
根据我的个人经验,如果它不是必需的参数,那么我会从查询中获取值,而不是从路由中获取。
所以可以使用[FromQuery] string profession
,用法如下:https://localhost:44344/api/employee?profession=developer
您可以在路由中使用 ?
标记可选参数,因此这将是 [Route("api/employee/{profession?}")]
或者如果您希望它具有默认值以防未给出值,则使用 [Route("api/employee/{profession=value}")]
查看更多内容
如果您想要同时允许 URL,那么您将不得不再添加一条路线。这将简单地将您的请求路由到操作方法。
现在,由于您需要一个参数,因此应该将其作为查询字符串的一部分传递到请求参数中。
新路线应如下所示。
public class EmployeeController : ApiController
{
// https://localhost:44344/api/employee/:profession
[HttpGet]
[Route("api/employee")]
[Route("api/employee/{profession}")]
public HttpResponseMessage Get(String profession)
{
try
{
var someBigList = ...
/// ... do some stuff
return Request.CreateResponse(HttpStatusCode.OK, someBigList );
}
catch (Exception e)
{
// error
}
}
}
考虑控制器:
public class EmployeeController : ApiController
{
// https://localhost:44344/api/employee/:profession
[HttpGet]
[Route("api/employee/{profession}")]
public HttpResponseMessage Get(String profession)
{
try
{
var someBigList = ...
/// ... do some stuff
return Request.CreateResponse(HttpStatusCode.OK, someBigList );
}
catch (Exception e)
{
// error
}
}
}
控制器接受以下形式的请求:
https://localhost:44344/api/employee/:profession
但是当我尝试
https://localhost:44344/api/employee
没有。
我们如何修复 GET 请求以接受两者?
根据我的个人经验,如果它不是必需的参数,那么我会从查询中获取值,而不是从路由中获取。
所以可以使用[FromQuery] string profession
,用法如下:https://localhost:44344/api/employee?profession=developer
您可以在路由中使用 ?
标记可选参数,因此这将是 [Route("api/employee/{profession?}")]
或者如果您希望它具有默认值以防未给出值,则使用 [Route("api/employee/{profession=value}")]
如果您想要同时允许 URL,那么您将不得不再添加一条路线。这将简单地将您的请求路由到操作方法。 现在,由于您需要一个参数,因此应该将其作为查询字符串的一部分传递到请求参数中。
新路线应如下所示。
public class EmployeeController : ApiController
{
// https://localhost:44344/api/employee/:profession
[HttpGet]
[Route("api/employee")]
[Route("api/employee/{profession}")]
public HttpResponseMessage Get(String profession)
{
try
{
var someBigList = ...
/// ... do some stuff
return Request.CreateResponse(HttpStatusCode.OK, someBigList );
}
catch (Exception e)
{
// error
}
}
}