【问题标题】:How can I setup one set of API's across multiple URI's?如何跨多个 URI 设置一组 API?
【发布时间】:2011-07-17 05:26:00
【问题描述】:
对于我们的网络应用程序,我想让开发人员使用我们的 api 创建帐户,当创建帐户时,URI 有一个子域。要做到这一点,我是否必须有两个单独的 API,因为 URL 不同。
用于创建帐户:api.example.com/v1
账户使用:subdomain.example.com/api/v1/
我们正在使用 .net mvc3,这可以通过一组 api 和路由来完成吗?
【问题讨论】:
标签:
asp.net-mvc-3
rest
routes
【解决方案1】:
您应该像往常一样设置路由以到达相关的控制器+动作,并在动作内部(或者更好 - 使用 ActionFilter)检查子域并设置确定用户是谁的适当代码,例如进一步处理。
过滤器示例如下:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class SubdomainFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
int? userID = null;
Uri uri = filterContext.HttpContext.Request.Url;
if (uri != null)
{
string domain = uri.Host;
// do whatever you need analyzing the 'domain' variable... like getting the user id according to the subdomain. Let's say we discoveered that the user id is 1.
userID = 1;
}
if (filterContext.ActionParameters.ContainsKey("Subdomain"))
filterContext.ActionParameters["SubdomainUser"] = userID;
base.OnActionExecuting(filterContext);
}
}
然后你的行动将是:
[SubdomainFilter]
public virtual ActionResult GetUserName(int? userID)
{
...
}