Blog Camp CEE 2008

Published 9/26/2008 by e0ne in Blog | Events
Tags: ,

Blog Camp Central and Eastern Europe, CEE - пройдет 17-19 октября в Киеве. Одна из частей программы - конкурс блогов. Более подбробно читаем на сайте и голосуем за понравившееся вам блоги.


Навеянно постом "Asp.NET контроли і HtmlEncode". Сейчас уже многие пользуются методами HtmlEncode/HtmlDecode и UrlEncode/UrlDecode для обработки данных, которые ввел пользователь. Но эти медоты используют базовый алгоритм, что может не подходить для частных случаев, таких как использование данных в качестве атрибутов html-тегов и других. Более спецефические методы нам предоставлены в библиотеке Microsoft Anti-Cross Site Scripting Library. Более подробно о ней и ещё преимуществах написано в документации.

Также для нахождения Sql и XSS Injection предоставлены Microsoft Source Code Analyzer for SQL Injection и XSS Detect Beta Code Analysis Tool соответственно. НЕ забываем прочитать базовые вседения о безопастности веб-приложений в целом и приложений, написанных на ASP.NET в частности.


Не так давно начал знакомиться с технологией Silverlight. Знал что он работает в браузерах IE 6.0, 7.0, FireFox 2, 3, Apple Safari под MacOS. Но сегодня случайно ошибся окном и открыл страницу в Google Chrome. Первая мысль была: сейчас посмотрю как работает приложение без установленного плагна Silverlight, но не тут то было... Chrome с радостью показал мне рабочие приложение.

 

 
После этого сразу же пошел на сайт Microsoft искать упоминание о это замечательной паре, но, к сожалению, ничего не нашел. 

Время от времени приходится организовывать возможность загрузки пользователями файлов на сервер: загрузка аватарок, файлов для галереи и т.д.  

Для решения этой задачи существует стандартный ASP.NET компонент FileUpload, который, в свою очередь, педставляет html-тэг <input type="file" />. В простнйшем случае код для загрузки файлов будет выглядеть так:

  •  Default.aspx:
    1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
    2.  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4.  
    5. <html xmlns="http://www.w3.org/1999/xhtml">
    6. <head runat="server">
    7.     <title></title>
    8. </head>
    9. <body>
    10.     <form id="form1" runat="server">
    11.     <div>
    12.         <asp:FileUpload ID="fu" runat="server" />
    13.        
    14.         <input type="submit" value="Upload" />
    15.     </div>
    16.     </form>
    17. </body>
    18. </html>
    19.  
    20.  

  • Default.aspx.cs
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Web;
    5. using System.Web.UI;
    6. using System.Web.UI.WebControls;
    7. using System.IO;
    8.  
    9. namespace WebApplication1
    10. {
    11.     public partial class _Default : System.Web.UI.Page
    12.     {
    13.         protected void Page_Load(object sender, EventArgs e)
    14.         {
    15.             if (IsPostBack && fu.FileContent != null)
    16.             {
    17.                 fu.PostedFile.SaveAs(path);
    18.             }
    19.         }
    20.     }
    21. }
    22.  
    23.  
Этот способ имеет несколько недостатков, один из которых - необходимость делать полный postback. Поэтому возникает желание сделать это с промощью AJAX. Т.к. использование AJAX подразумевает собой применение объекта XMLHttpRequest, который из-за соображений безопастногсти запрещает передавать на сервер файлы, то решать данную задачу приходится другим способом. А именно с использованием iframe.
Переделаем предыдущий варивант и с приминением ifame:
  • Default.aspx: 
    1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
    2.  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4.  
    5. <html xmlns="http://www.w3.org/1999/xhtml">
    6. <head runat="server">
    7.     <title></title>
    8. </head>
    9. <body>
    10.     <script type="text/javascript">
    11.         function onFormSubmit() {
    12.             var formUpload = document.getElementById('form1');
    13.             formUpload.target = 'upload_target';
    14.             formUpload.action = 'default.aspx';

    15.         }
    16.     </script>
    17.     <form id="form1" onsubmit="onFormSubmit();">
    18.     <div>
    19.         <input id="file1" type="file" name="file1" /> <br />
    20.         <input id="file2" type="file" name="file2" />
    21.        
    22.         <input type="submit" value="Upload" />
    23.        
    24.         <iframe id="upload_target1" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
    25.     </div>
    26.     </form>
    27. </body>
    28. </html>
    29.  

  • Default.aspx.cs:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Web;
    5. using System.Web.UI;
    6. using System.Web.UI.WebControls;
    7. using System.IO;
    8.  
    9. namespace WebApplication1
    10. {
    11.     public partial class _Default : System.Web.UI.Page
    12.     {
    13.         protected void Page_Load(object sender, EventArgs e)
    14.         {
    15.             if (IsPostBack)
    16.             {
    17.                 HttpFileCollection uploads = HttpContext.Current.Request.Files;
    18.                 for (int i = 0; i < uploads.Count; i++)
    19.                 {
    20.                     HttpPostedFile upload = uploads[i];
    21.  
    22.                     if (upload.ContentLength == 0)
    23.                         continue;
    24.  
    25.                     upload.SaveAs(path);
    26.                 }
    27.  
    28.             }
    29.         }
    30.     }
    31. }
    32.  
    33.  
Таким образом мы получаем ajax-эффект закгрузки файлов на сервер. Ещё одним интересным способом загрузки файлов является использование flash-компонентов (http://www.swfupload.org/). Готовый к приминению ajax-компонент можно скачать здесь: http://ajaxuploader.com/. Посмотреть how-to видео можно на сайте ASP.NET (http://www.asp.net/learn/videos/)

Вот так, неожиданно для меня теперь пожно зарегистировать домен www.моё_имя_на_русском_языке.net. С 2-го сентября 2008-го года RU-CENTER добавил возможность регистрировать доменные имена, содержащие символы таких национальных алфавитов: латинский, греческий, кириллица, армянский, иврит, арабский, грузинский, бенгальский, ория, тамильский, каннада, тайский, тибетский, бирманский, рунический, монгольский, японские, китайские и корейские иероглифы. Стоит отметить, что каждому домену, содержащему символы национальных алфавитов, будет соответствовать домен из латинских символом. К примеру домен «xn--b1alf1j.net» представляется как «київ.net».

Так что теперь ждём новую волну перепродажи доменов и регистрируем свои, пока ещё свободно.


Практически только что появилась возможность скачать новый браузер от компании Google - GoogleChrome. Пока делюсь первыми впечатлениями:

  • как всегда от Google - новый, но эт этого не менее понятный интерфейс;
  • каждая вкладка - отдельный процесс в системе - неожиданное для меня, но удобное решение;
  • в отличии от IE8 beta - сайты открываются в таком виде, каком их одидаем увидеть;
  • автоматически подхватились настройки с FireFox, что сделало передох более радостным.
Пока всё. Качаем, устанавливает, пишем свои коментарии.

С момента выхода ASP.NET MVC идут обсуждения: будет ли он включен в состав .net framework или нет? Если верить слухам и некоторым сообщениям в msdn blogs, то рано или поздно это случится.

Текущая его версия Preview 5, доступная на CodePlex, говорит что до релиза проект ещё не готов, хотя некоторые надеялись, что ASP.NET MVC будет частью .net 3.5 sp1. Надежы, в большей степени, не оправдались. Почему в большей? Потому что сборки System.Web.Abstractions.dll и System.Web.Routing.dll, ранее присутствующие только в ASP.NET MVC, вошли в .NET 3.5 Service Pack 1.

Можно считасть что слияние началось и после релиза, который должен появиться в конце этого года, ASP.NET MVC станет неотъемлемой частью .net, как сейчас WebForms.