我们已经得到了出生在.NET 1.1/IIS6天长时间运行ASP.NET web的表单应用程序。我们现在在.NET4.5/IIS7上,但是我们没有对MVC做任何事情。URL重写和Web API
我们提供了一个目录给客户,并给他们,他们可以使用的URL:
www.ourhost.com/customername
使用IHttpModule的,我们开发我们拉“客户名称”出来的URL找到在数据库中的用户自定义。然后,该客户的ID存储在页面的上下文中*,并被网站上的几乎所有页面用于为该客户定制内容。在这个过程之后,上面的URL会被重写,并处理为
www.ourhost.com/index.aspx
具有通过它的上下文获得了客户的ID的Index.aspx,它可以做它的事。
这个伟大的工程,我们支持几千个客户了。重写逻辑相当复杂,因为它验证了客户帐户,如果客户无效,则重定向到'呃哦'页面,如果客户没有支付,则重定向到'找到经销商'页面等。
现在我想构建一些Web API控制器,MVC风格的重写让我担心。我看到很多例子,其中重写发生,使URL的这样的工作:
www.ourhost.com/api/{controller}
但我仍然需要这些Web API“调用”在客户的情况下发生的。我们的页面使用JSON/AJAX异步调用变得更加复杂,但在回答这些调用时,我仍然需要客户环境。我想URL的是
www.ourhost.com/customername/api/{controller}
但我难倒如何配置路由要做到这一点,并将它与我们的IHttpModule发挥很好。
这甚至可能吗?
*更新:当我说“存储在页上下文中的”我的意思是与包括字典,我可以存储一些网页/请求特定的数据每个Web请求关联的HttpContext。
当你说“存储在页面的上下文中” - 你是指'Session'对象,还是你直接写入某种'Cookie'?既然你标记了这个'web-api',它就会有点不同。 – 2013-04-24 20:01:19
@Troy:感谢您的评论 - 我已经通过澄清更新了我的问题。 – n8wrl 2013-04-25 12:11:09
明白了 - 您正在使用'HttpContext.Current.User'来跟踪您登录的用户是谁?你如何将它保存到后续调用中,该调用在URL中不包含用户的用户名? – 2013-04-25 16:41:54