Лучший отвечающий
Link в соц. сетях

Вопрос
-
В соц. сетях есть такая вещь, пишешь URL сайта и каким то образом появляется картинки с этого сайта, в общем Вы это знаете.
Так вот, мне интересует как это работает и как делать что с моего сайта чтобы он взял первый очередь ту картинку которая по теме а не фото пользователя.
Я знаю что в этих сайтах предоставляют возможность выбора, но этого нет когда вставишь в комментах(например facebook)
спасибо и извините за примитив
21 мая 2012 г. 10:31
Ответы
-
Значит делаем так. В Global.asax пишем код
public static void RegisterRoutes(RouteCollection routes) { //Идёт первым, чтобы не попала в IgnoreRoute routes.Add("ImagesRoute", new Route("myImages/{filename}", new ImageRouteHandler())); routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); }
Создаём обработчик нашего роута
public class ImageRouteHandler : IRouteHandler { private string denyDomain = "myDomainName"; public IHttpHandler GetHttpHandler(RequestContext requestContext) { string filename = requestContext.RouteData.Values["filename"] as string; //Или более гибкий подход на основе регулярных выражений if(requestContext.HttpContext.Request.Url.ToString().Contains(denyDomain)) { return null; } else { requestContext.HttpContext.Response.Clear(); requestContext.HttpContext.Response.ContentType = GetContentType(requestContext.HttpContext.Request.Url.ToString()); string filepath = requestContext.HttpContext.Server.MapPath("~/Content/MyImages/" + filename ); requestContext.HttpContext.Response.WriteFile(filepath); requestContext.HttpContext.Response.End(); } return null; } private static string GetContentType(String path) { switch (Path.GetExtension(path)) { case ".bmp": return "Image/bmp"; case ".gif": return "Image/gif"; case ".jpg": return "Image/jpeg"; case ".png": return "Image/png"; default: break; } return ""; } } }
И папку с изображениями которые не нужно передавать определённому домену. Например ~/Content/MyImages. Закрываем доступ к нему всем добавив туда файл Web.Config с содержимым
<?xml version="1.0"?> <configuration> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
но доступ остаётся через маршрутизацию, с фильтрацией доменов. И всё, а вот проект.
- Помечено в качестве ответа DavidJag 21 мая 2012 г. 14:06
- Изменено YatajgaModerator 3 ноября 2012 г. 19:05 Обновил ссылку
21 мая 2012 г. 13:35Модератор
Все ответы
-
Если можно по подробней и понятней, а то пока не очень понятно.21 мая 2012 г. 10:53Модератор
-
Дело в том что в социальных сайтах есть поля куда вставишь линк на другие сайты, так вот когда я вставляю линк на мой сайт на конкретный пост в социальных сайтах появляется фото пользователя моего сайта кто этот пост создал.
вопрос что менять в моем сайте чтоб брал картину поста или хотя бы не брал фото пользователей моего сайта
21 мая 2012 г. 11:10 -
Ясно, понял. А на чём написан Ваш сайт?21 мая 2012 г. 11:18Модератор
-
ASP.NET MVC 321 мая 2012 г. 11:20
-
Ну тогда дело обстоит ещё проще. Используя систему роутинга, Вы можете закрыть доступ к вашим картинкам, для определённых доменов или наоборот, выдавать их по чётко указанным ссылкам.21 мая 2012 г. 11:26Модератор
-
мне нужен чтоб фото пользователей не взял а остальные взял
а каким образом, если можно примерчик на C#
21 мая 2012 г. 11:32 -
Значит делаем так. В Global.asax пишем код
public static void RegisterRoutes(RouteCollection routes) { //Идёт первым, чтобы не попала в IgnoreRoute routes.Add("ImagesRoute", new Route("myImages/{filename}", new ImageRouteHandler())); routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); }
Создаём обработчик нашего роута
public class ImageRouteHandler : IRouteHandler { private string denyDomain = "myDomainName"; public IHttpHandler GetHttpHandler(RequestContext requestContext) { string filename = requestContext.RouteData.Values["filename"] as string; //Или более гибкий подход на основе регулярных выражений if(requestContext.HttpContext.Request.Url.ToString().Contains(denyDomain)) { return null; } else { requestContext.HttpContext.Response.Clear(); requestContext.HttpContext.Response.ContentType = GetContentType(requestContext.HttpContext.Request.Url.ToString()); string filepath = requestContext.HttpContext.Server.MapPath("~/Content/MyImages/" + filename ); requestContext.HttpContext.Response.WriteFile(filepath); requestContext.HttpContext.Response.End(); } return null; } private static string GetContentType(String path) { switch (Path.GetExtension(path)) { case ".bmp": return "Image/bmp"; case ".gif": return "Image/gif"; case ".jpg": return "Image/jpeg"; case ".png": return "Image/png"; default: break; } return ""; } } }
И папку с изображениями которые не нужно передавать определённому домену. Например ~/Content/MyImages. Закрываем доступ к нему всем добавив туда файл Web.Config с содержимым
<?xml version="1.0"?> <configuration> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
но доступ остаётся через маршрутизацию, с фильтрацией доменов. И всё, а вот проект.
- Помечено в качестве ответа DavidJag 21 мая 2012 г. 14:06
- Изменено YatajgaModerator 3 ноября 2012 г. 19:05 Обновил ссылку
21 мая 2012 г. 13:35Модератор -
огромное спасибо я попробую если что напишу thanks21 мая 2012 г. 14:06