我有一个Web API应用程序,预计会返回一份患者临床警报列表。使用以下URL调用请求
http://myserver:18030/api/Alerts/search?systemId=182&patientId=T000282L
其中systemId确定与patientID值相关的临床信息系统。路由在WebApiConfig.cs
中设置如下public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "Alertsapi",
routeTemplate: "api/Alerts/search",
defaults: new { controller = "Alerts" , action = "search"}
);
并且控制器操作如下:
[ActionName("search")]
public List<Alert> GetAlerts(string systemId = "", string patientId = "")
{
var alerts = from a in db.Alerts
where a.alertAuthorReference.Equals(systemId)
where a.alertSubjectReference.Equals(patientId)
select a;
return alerts.ToList();
}
我认为QueryString参数会自动映射到操作方法参数,但在此示例中,patientId始终为null(或者我将其作为默认值提供空字符串)。我已经尝试在action方法中的代码中读取QueryString,但它只有一个成员具有关键的systemId。
为什么不传递第二个参数?
我可以通过使用patientId = 182:T000282L的QueryString来解决它,然后解析这个复合键,但我希望最终能够搜索多个参数,因此可能需要访问第三个甚至第四个值来自查询字符串。
答案 0 :(得分:0)
您需要为此定义路线
routes.MapHttpRoute(
name: "GetPagedData",
routeTemplate: "api/{controller}/{action}/{pageSize}/{pageNumber}"
)
您的控制器就像
[HttpGet]
("GetPagedResult")]
HttpResponseMessage GetPagedResult(int StartIndex, int PageSize)
{
// you can set default values for these parameters like StartIndex = 0 etc.
}
答案 1 :(得分:0)
使用Web API 2和属性路由,您可以轻松获得所需内容。
看一下这篇文章:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
首先,您需要编辑WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
[...]
在您的情况下,您可以在控制器内测试它是否适用:
[Route("search")]
[HttpGet]
public string search(string systemId = "", string patientId = "")
{
return patientId;
}
并称之为:
http://myserver:18030/search?systemId=182&patientId=T000282L