Могу ли я использовать ограничение маршрута здесь?
Если у меня есть следующий URL:
/ 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();
У кого-нибудь есть идеи?
Я думаю, что я ищу способ ограничения маршрута через его домен, а не токен маршрута, если это имеет смысл.
1 ответ
Решение
Вы можете написать собственный маршрут:
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" }
)
);