From 03f92e1b0ce9185456063efe34acd0a68a0960fe Mon Sep 17 00:00:00 2001 From: Jason Duffett Date: Mon, 13 Aug 2012 11:54:14 +0100 Subject: [PATCH 1/2] Enumerate copies of Response properties Try and fix InvalidOperationException occurring in this method (Issue #680) --- src/Nancy.Hosting.Aspnet/NancyHandler.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Nancy.Hosting.Aspnet/NancyHandler.cs b/src/Nancy.Hosting.Aspnet/NancyHandler.cs index 874534f7c7..2a3ce8d75d 100644 --- a/src/Nancy.Hosting.Aspnet/NancyHandler.cs +++ b/src/Nancy.Hosting.Aspnet/NancyHandler.cs @@ -99,14 +99,18 @@ private static void SetNancyResponseToHttpResponse(HttpContextBase context, Resp response.Contents.Invoke(context.Response.OutputStream); } + /// + /// Copies are made of each collection (Headers, Cookies) for enumeration to avoid + /// InvalidOperationExceptions if ASP.NET modifies the response on a different thread. + /// private static void SetHttpResponseHeaders(HttpContextBase context, Response response) { - foreach (var header in response.Headers) + foreach (var header in response.Headers.ToDictionary(x => x.Key, x => x.Value)) { context.Response.AddHeader(header.Key, header.Value); } - foreach(var cookie in response.Cookies) + foreach (var cookie in response.Cookies.ToList()) { context.Response.AddHeader("Set-Cookie", cookie.ToString()); } From b8e7f184cd2063df0139a0927681f714ab0a283d Mon Sep 17 00:00:00 2001 From: Jason Duffett Date: Mon, 13 Aug 2012 14:52:12 +0100 Subject: [PATCH 2/2] Stripping too many characters from the request path Path.GetExtension includes the period. --- src/Nancy/Routing/DefaultRouteResolver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nancy/Routing/DefaultRouteResolver.cs b/src/Nancy/Routing/DefaultRouteResolver.cs index b2055cbbc2..acb237211e 100644 --- a/src/Nancy/Routing/DefaultRouteResolver.cs +++ b/src/Nancy/Routing/DefaultRouteResolver.cs @@ -50,7 +50,7 @@ public ResolveResult Resolve(NancyContext context) if (!string.IsNullOrEmpty(extension)) { - var length = context.Request.Path.Length - (extension.Length + 1); + var length = context.Request.Path.Length - extension.Length; context.Request.Url.Path = context.Request.Url.Path.Substring(0, length); }