是否可以将Session变量(对象)作为参数传递给API?

时间:2013-08-07 22:38:01

标签: c# session asp.net-web-api

我有一个包含搜索条件的网页。

一旦用户选择了他想要的内容并输入任何要搜索的关键词,他就会被重定向到另一个页面,显示他的搜索结果。

此会话对象包含其搜索的所有信息:

var ProjectSearchCriteria = (GBLProjectSearchCriteria) Session[GblConstants.SESSION_PROJECT_SEARCH_CRITERIA];

我有办法将此对象传递给API吗?

像这样:

[HttpGet]
public List<string> getEpisodes(GBLProjectSearchCriteria psc)
{
     var ProjectSearchResult = new ProjectSearchResultController();
     var GBLProjectSearchResultListData = ProjectSearchResult.GetProjectSearchResultList(psc);
     return (from GBLProjectSearchResult item 
             in GBLProjectSearchResultListData
             select item.Title).ToList();
}

我之所以这样做是因为搜索条件很大并且已经存在,所以我不希望API有38032823参数。

这甚至可能吗?我该怎么办?任何替代方案?

2 个答案:

答案 0 :(得分:2)

Web API绑定来自URI,查询字符串等或请求正文的参数。如果要从任何其他东西绑定,尤其是在请求消息之外,您可以创建自己的参数绑定。见this。博客文章为类型IPrincipal创建了一个参数绑定,但您可以为`GBLProjectSearchCriteria'执行类似的操作。

答案 1 :(得分:0)

你尝试过吗?

getEpisodes((GBLProjectSearchCriteria) Session[GblConstants.SESSION_PROJECT_SEARCH_CRITERIA]);

我遇到的一个显而易见的问题是,既然您已经知道了数据类型,并且对它进行了类型转换,为什么要使用var?

var ProjectSearchCriteria = (GBLProjectSearchCriteria) ....

这不是更有意义吗?

GBLProjectSearchCriteria  ProjectSearchCriteria = (GBLProjectSearchCriteria) ....