private void Application_BeginRequest(Object source, EventArgs e) { // Create HttpApplication and HttpContext objects to access // request and response properties. HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; if (context.Request.HttpMethod == "PROPFIND" || context.Request.HttpMethod == "OPTIONS") { Uri url = context.Request.Url; if (IsWebDavRootFolderRequest(context.Request)) { WebDavAbstractFactory factory = new WebDavAbstractFactory(); WebDavElementStorageProvider storageProvider = factory.Create <WebDavElementStorageProvider>(ObjectTypes.Folder); if (storageProvider != null) { WebDavApplication.DefaultProvider = storageProvider; WebDavTicketRequest request = new WebDavTicketRequest(context.Request, ePluginToken.webdav); WebDavTicketResponse response = new WebDavTicketResponse(context.Response); WebDavApplication.ProcessRequest(request, response); context.Response.End(); } } } }
public void ProcessRequest(HttpContext context) { //try //{ //проверяем есть ли в ticket-е идентификатор сессии WebDavTicket ticket = WebDavUrlBuilder.GetWebDavTicket(context.Request.Url.ToString()); if (ticket == null) { throw new HttpException((int)HttpStatusCode.BadRequest, "Incorrect URI."); } if (!WebDavAuthHelper.WebDavAuthentificate(context, ticket)) { //Используем стандартный механизм аутентификации System.Web.Security.FormsAuthentication.RedirectToLoginPage(); return; } //throw new HttpException((int)HttpStatusCode.Unauthorized, "Unauthorized"); WebDavAbstractFactory factory = new WebDavAbstractFactory(); WebDavElementStorageProvider storageProvider = factory.Create <WebDavElementStorageProvider>(ticket.AbsolutePath.StorageType); if (storageProvider == null) { throw new HttpException((int)HttpStatusCode.BadRequest, "Incorrect URI."); } //Запускаем механизм обработки web dav запроса WebDavTicketRequest request = new WebDavTicketRequest(context.Request, ePluginToken.webdav); WebDavTicketResponse response = new WebDavTicketResponse(context.Response); WebDavApplication.DefaultProvider = storageProvider; try { bool enableTrace = Convert.ToBoolean(ConfigurationManager.AppSettings[ConstEnableTrace]); if (enableTrace) { WebDavTracer.TraceBinaryBody = false; WebDavTracer.EnableTrace = true; } } catch (FormatException) { } if (request.HttpMethod == WebDavHttpMethod.GET) { //для get запросов выключаем буферизацию для работы с большими файлами context.Response.BufferOutput = false; //Некоторые браузеры кешируют результаты GET запроса при редактировании на сервере. //Установка expires равную текущей дате позволят указать браузеру что кеширование не требуется HttpCachePolicy cache = HttpContext.Current.Response.Cache; cache.SetExpires(DateTime.Now); //Если для запрошенного файла стоит флаг ForceDownload и не включен фдаг WebDav //то вернуть как attachment для выбора пользователем приложения для работы с документом if (!string.IsNullOrEmpty(ticket.AbsolutePath.FileName)) { string fileExtension = Path.GetExtension(ticket.AbsolutePath.FileName); if (!ContentTypeResolver.IsWebDAVSupportedExtension(fileExtension) && ContentTypeResolver.IsAllowForceDownload(fileExtension)) { context.Response.AddHeader("Content-Disposition", "attachment;" + "filename=" + ticket.AbsolutePath.FileName); } } } WebDavApplication.ProcessRequest(request, response); //} //catch (HttpException ex) //{ // // Http Exception // context.Response.Clear(); // context.Response.ContentEncoding = System.Text.Encoding.UTF8; // context.Response.StatusCode = ex.GetHttpCode(); // context.Response.StatusDescription = ex.Message; //} //catch (Exception ex) //{ // // Global Exception // context.Response.Clear(); // context.Response.ContentEncoding = System.Text.Encoding.UTF8; // context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; // context.Response.StatusDescription = ex.Message; // byte[] errorBuffer = System.Text.Encoding.UTF8.GetBytes(ex.ToString()); // context.Response.OutputStream.Write(errorBuffer, 0, errorBuffer.Length); //} //context.Response.Flush(); }