Легкий-> я сделал метод расширения.NET некоторое время назад. Это все обернуто в единственном DLL, который можно использовать и ссылка. это не требует НИКАКОМУ ВЕБ-СЕРВИСУ или третьей стороне внешнего вызова API.
это также свободно.
это - также открытый исходный код. и тому подобное.
Обладают!
Это звонило IPAddressExtensions, и это находится на Codeplex.
Отличное направление от @ eu-ge-ne.
Я использовал идею настраиваемого маршрута от @ eu-ge-ne, чтобы добавить значение маршрута к каждому URL-адресу, и использовал базовый контроллер для обработки клавиши предварительного просмотра в сеанс.
if ((requestContext.HttpContext.Request.QueryString != null &&
requestContext.HttpContext.Request.QueryString["Preview"] != null &&
requestContext.HttpContext.Request.QueryString["Preview"].ToString() =="True") ||
(requestContext.HttpContext.Request.UrlReferrer != null &&
requestContext.HttpContext.Request.UrlReferrer.ToString().Contains("Preview=True")))
{
//Add the preview key to session
}
else
{
//Remove the preview key to session
}
Я использовал приведенный выше код в методе Initialize
базового контроллера. Таким образом, ключ предварительного просмотра будет в сеансе, если строка запроса имеет предварительный просмотр, иначе он удаляется из сеанса.
Еще раз спасибо @ eu-ge-ne.
Может быть, вам нужен собственный маршрут?:
public class PreviewRoute : System.Web.Routing.Route
{
...
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var preview = System.Web.HttpContext.Current.Session["Preview"];
if (!values.ContainsKey("Preview"))
values.Add("Preview", preview);
var path = base.GetVirtualPath(requestContext, values);
return path;
}
}
}
Установите Сессию ["Предварительный просмотр"]
в любое время, и вы получите все свои URL-адреса с помощью ? Preview = True
:
System.Web.HttpContext.Current.Session.Add("Preview", true);
ОБНОВЛЕНО:
Используйте этот маршрут в Global.asax.cs:
routes.Add("Default",
new PreviewRoute("{controller}/{action}/{id}", new MvcRouteHandler()) {
Defaults = new RouteValueDictionary(
new { controller = "Home", action = "Index", id = "" }
)
}
);
вместо:
routes.MapRouteLowercase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Также вы можете попробовать это расширение:
public static class CustomRouteExtensions
{
public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults) {
routes.MapPreviewRoute(name, url, defaults, null);
}
public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) {
if (routes == null) {
throw new ArgumentNullException("routes");
}
if (url == null) {
throw new ArgumentNullException("url");
}
var route = new PreviewRoute(url, new MvcRouteHandler()) {
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints)
};
if (String.IsNullOrEmpty(name)) {
routes.Add(route);
}
else {
routes.Add(name, route);
}
}
}
В Global .asax.cs:
routes.MapPreviewRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Вы можете создать помощника представления, который добавляет существующую строку запроса к любым ссылкам, которые вы создаете с помощью вашего нового помощника.
Это может помочь
Возможно, вам лучше сохранить это информация в сеансе.