суббота, 21 марта 2009 г.

URL rewritintg а точнее routing в ASP.Net 3.5

Все, что необходимо знать по этой теме прекрасно описано в статье ASP.Net routing... Goodby URL rewriting?  Криса Каванагса (Интересно правильно ли я транскрибировал его фамилию? :) 
И здесь я просто кратко повторю:

Первым делом надо добавить в проект ссылки на сборки System.Web.Routing и System.Web.Abstrations

public class WebFormRouteHandler : IRouteHandler where T : IHttpHandler, new()
{
public string VirtualPath { get; set; }

public WebFormRouteHandler(string virtualPath)
{
this.VirtualPath = virtualPath;
}

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return (VirtualPath != null)
? (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(T))
: new T();
}
}

//Этот клас необходим для работы механизма роутинга в IIS 7
public class RoutingHandler : UrlRoutingHandler
{
protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)
{
}
}
Чтобы роутинг заработал в IIS7 Необходимо выполнить ряд дополнительных действий

  • Вставить в web.config, в раздел system.webServer в теге modules следующую строчку:


  • В сам тег modules добавить атрибут


  • И последнее в том же разделе в тег handlers добавить:



Ну и теперь для счастливой жизни нам не хватает только следующего кода в файле Global.asax

protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
// Note: Change the URL to "{controller}.mvc/{action}/{id}" to enable
// automatic support on IIS6 and IIS7 classic mode

var routeHandler = new WebFormRouteHandler("~/MyPage.aspx");

routes.Add(new Route("{page}", routeHandler));
routes.Add(new Route("AccountServices/{page}", routeHandler));
routes.Add(new Route("Default.aspx", routeHandler));
}
Перед тем как использовать рекомендую так-же прочитать

Using routing with WEbforms
. Дабы спастись от злых хакеров

пятница, 20 марта 2009 г.

Получаем абсолютный путь к файлу в аттрибуте action тега form в ASP.Net

Так уж устроена работа программиста, что периодически приходиться спотыкаться на тривиальнейших вещах. И вот споткнувшись, обязательно во время выполнения черезвычайно срочного заказа, который надо было сдать позавчера, приходиться сидеть по многу часов подряд, и искать способ обойти какую-нибудь очередную хрень. За это время, заказчик успевает плюнуть на тебя и уходит на всегда. А ты продолжаешь сидеть и пытаешься понять, где же тебя...

Так и в этот раз. Оказалось, что атрибут action тега form возвращаемый aspx страницей содержит в содержит в себе исключительно относительный путь к странице. И что делать? Могли ведь предусмотреть в webconfig-е параметр, например, AbsoluteURLs = true, который бы заменял в случае необходимости относительные пути на абсолютные? И где он? Может я просто про него не знаю?

Ну а теперь собственно решение.
В папочке App_Browsers создаем файл Form.browser. В этот файл помещаем следующий код:










После этого мы созадем классы FormRewriterControlAdapter и RewriteFormHtmlTextWriter со следующим содержимым:


namespace WebApplication1
{
public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
{
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
base.Render(new RewriteFormHtmlTextWriter(writer));
}

public class RewriteFormHtmlTextWriter : HtmlTextWriter
{
public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
: base(writer)
{
this.InnerWriter = writer.InnerWriter;
}

public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name == "action")
{
HttpContext Context = HttpContext.Current;

if (Context.Items["ActionAlreadyWritten"] == null)
{
Uri url = Context.Request.Url;

value = ((new StringBuilder()).AppendFormat("http://{0}:{1}{2}", url.Host, url.Port, Context.Request.RawUrl)).ToString();
Context.Items["ActionAlreadyWritten"] = true;
}
}
base.WriteAttribute(name, value, fEncode);
}
}
}
}


Вуаля. Сейчас если соберусь, выложу способ замены относительных путей на абсолютные в других частях aspx.

пятница, 13 марта 2009 г.

Загрузка XAML во время выполнения

Загружаем элементы Silverlight из стороннего XAML файла.

private Canvas GetControlFromFile()
{
Uri uri = new Uri("Hands.xaml", UriKind.Relative);

System.Windows.Resources.StreamResourceInfo streamInfo = Application.GetResourceStream(uri);
if ((streamInfo != null) && (streamInfo.Stream != null))
{
using (System.IO.StreamReader reader = new StreamReader(streamInfo.Stream))
{
return XamlReader.Load(reader.ReadToEnd()) as Canvas;
}
}
return null;
}


Полученный элемент добавляем к другому элементу

LayoutRoot.Children.Add(GetControlFromFile);

воскресенье, 1 марта 2009 г.

Turn Twitter Into Your Personal Assistant

A few simple conventions, together with RDF and SPARQL, can turn your Twitter feeds into rich information streams, which you can then use for a more productive microblogging experience.


Помоему это интересно..

Ссылки по SW

Аннотация

Stasis Wiki - коротко об аннотации. На сайте кроме этого много другой полезной информации.

Anotea - Анотация от W3C

OnTeA: Semi-automatic Ontology based TextAnnotation Method - Чрезвычайно позновательный документ о методах реализации анотирования.
In this paper we describe a solution for the ontology based text annotation (OnTeA) tool. The tool analyzes a document or text using regular expression patterns and detects equivalent semantic elements according to the defined domain ontology.


Просто ссылки


W3C Semantic Web Activity - Самая ЖЫРНАЯ ссылка

30+ Semantic Web Introductions, References, Guides, and Tutorials - Кладезь. Найден при помощи HeadUp. ;)
"Matrix has you"
Semantic Universe - Очень полезный источник всего и вся.

Redland RDF Libraries - библиотеки для работы c SW на C

Introducing SPARQL: Querying the Semantic Web - Введение в SPARQL: Запросы к Смантическому Веб-у