如果我有以下网址:
/ someurl
我有两个域名:
us.foo.com
au.foo.com
我想要200(匹配):
us.foo.com/someurl
但这是404(不匹配):
au.foo.com/someurl
路线如下:
RouteTable.Routes.MapRoute(
"xyz route",
"someurl",
new { controller = "X", action = "Y" }
);
我猜是因为没有路由值,我不能基于主机限制URL?这是对的吗?
如果是这样,我怎么能这样做,除了以下(丑陋)的动作:
if (cantViewThisUrlInThisDomain)
return new HttpNotFoundResult();
有人有任何想法吗?
我想我正在寻找一种通过它的域限制路由的方法,而不是路由令牌,如果这是有道理的。
答案 0 :(得分:7)
您可以编写自定义路线:
public class MyRoute : Route
{
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var url = httpContext.Request.Url;
if (!IsAllowedUrl(url))
{
return null;
}
return base.GetRouteData(httpContext);
}
private bool IsAllowedUrl(Uri url)
{
// TODO: parse the url and decide whether you should allow
// it or not
throw new NotImplementedException();
}
}
然后在RegisterRoutes
中的Global.asax
方法中注册:
routes.Add(
"xyz route",
new MyRoute(
"{someurl}",
new { controller = "Home", action = "Index" }
)
);