#c# #asp.net-mvc #asp.net-mvc-3
#c# #asp.net-mvc #asp.net-mvc-3
Вопрос:
Я хочу, чтобы в моем методе действия был доступен мой Request.Url.Host. Однако я не хочу устанавливать его в routedata, потому что он будет виден пользователю в URL. Как я могу выполнить это так, чтобы Request.Url.Host был доступен в моем доменном имени variabele, но теперь показывался пользователю в URL? Я попытался добавить его в Request.Form.Add(«домен», Request.Url.Host), но это не работает, потому что запрос.Форма предназначена только для чтения.
например:
public ActionResult Foo(string domain, int id) //id is the standard routedata that you get from url.
{
..//code
}
Что я могу сделать лучше всего? Я не хочу выполнять Request.Url.Host в каждом методе действия, поэтому я пробую этот подход.
Я пытался сделать это:
public class MyRoute : Route
{
#region '----- Method(s) -----'
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData routeData = base.GetRouteData(httpContext);
string domain = httpContext.Request.Url.Host;
routeData.DataTokens["domain"] = domain;
return routeData;
}
#endregion
}
Но моя переменная домена в моем методе действия имеет значение null.
Спасибо.
Комментарии:
1. Почему вы хотите,
domain
чтобы стать частью URL?
Ответ №1:
РЕДАКТИРОВАТЬ: полная перезапись:
Вы должны добавить свои пользовательские данные в routeData.Values
вместо routeData.DataTokens
.
public class MyRoute : Route
{
#region '----- Method(s) -----'
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData routeData = base.GetRouteData(httpContext);
string domain = httpContext.Request.Url.Host;
routeData.Values["domain"] = domain;
return routeData;
}
#endregion
}
И регистрация вашего MyRoute
маршрута (MVC использует первый соответствующий маршрут, поэтому он должен идти первым):
routes.Add(new MyRoute("{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
Комментарии:
1. @Jaggu смотрите мой переписанный ответ.
2. Большое спасибо!!!! Работает великолепно! Я борюсь с этим с последних 2 часов, но вы решили мою проблему.
3. У меня было неправильное отображение в основном маршрутов. Добавьте строку. Я не знал, что вы можете установить случайные данные маршрута без того, чтобы этот ключ был частью URL.