Beispiel #1
0
 private void ProcessMessageThread(object state)
 {
     var context = (HttpListenerContext)state;
     var request = context.Request;
     var response = context.Response;
     try
     {
         UriTemplateMatch templateMatch;
         var route = Routes.Find(request, out templateMatch);
         if (route != null)
         {
             var auth = Authentication.TryAuthorize(context, route);
             if (auth.Principal != null)
             {
                 var ctx = new HttpThreadContex(request, response, templateMatch);
                 ThreadContext.Request = ctx;
                 ThreadContext.Response = ctx;
                 Thread.CurrentPrincipal = auth.Principal;
                 using (var stream = route.Handle(templateMatch, context))
                 {
                     if (stream.CanSeek)
                         response.ContentLength64 = stream.Length;
                     stream.CopyTo(response.OutputStream);
                 }
             }
             else ReturnError(response, (int)auth.ResponseCode, auth.Error);
         }
         else
         {
             var unknownRoute = "Unknown route " + request.RawUrl + " on method " + request.HttpMethod;
             ReturnError(response, 404, unknownRoute);
         }
     }
     catch (SecurityException sex)
     {
         ReturnError(response, (int)HttpStatusCode.Forbidden, sex.Message);
     }
     catch (WebFaultException<string> wfe)
     {
         ReturnError(response, (int)wfe.StatusCode, wfe.Detail);
     }
     catch (Exception ex)
     {
         ReturnError(response, 500, ex.Message);
     }
 }
Beispiel #2
0
 private void ProcessMessageThread(object state)
 {
     var context = (HttpListenerContext)state;
     var request = context.Request;
     var response = context.Response;
     try
     {
         RouteMatch match;
         var route = Routes.Find(request, out match);
         if (route != null)
         {
             var auth = Authentication.TryAuthorize(context, route);
             if (auth.Principal != null)
             {
                 var ctx = new HttpThreadContex(request, response, match);
                 ThreadContext.Request = ctx;
                 ThreadContext.Response = ctx;
                 Thread.CurrentPrincipal = auth.Principal;
                 using (var stream = route.Handle(match.BoundVars, context))
                 {
                     var cms = stream as ChunkedMemoryStream;
                     if (cms != null)
                     {
                         response.ContentLength64 = cms.Length;
                         cms.CopyTo(response.OutputStream);
                     }
                     else
                     {
                         if (stream.CanSeek)
                             response.ContentLength64 = stream.Length;
                         stream.CopyTo(response.OutputStream);
                     }
                 }
             }
             else ReturnError(response, (int)auth.ResponseCode, auth.Error);
         }
         else
         {
             var unknownRoute = "Unknown route " + request.RawUrl + " on method " + request.HttpMethod;
             ReturnError(response, 404, unknownRoute);
         }
     }
     catch (SecurityException sex)
     {
         ReturnError(response, (int)HttpStatusCode.Forbidden, sex.Message);
     }
     catch (ActionNotSupportedException anse)
     {
         ReturnError(response, 404, anse.Message);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         Logger.Error(ex.ToString());
         ReturnError(response, 500, ex.Message);
     }
     finally
     {
         response.Close();
     }
 }