React to WebEncoders and Http.Abstractions changes.

This commit is contained in:
Chris R 2015-11-02 17:46:25 -08:00
parent 5e0fa0773d
commit c239b67368
11 changed files with 37 additions and 53 deletions

View File

@ -1,9 +1,9 @@
using System; using System;
using System.Text.Encodings.Web;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics; using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.Extensions.WebEncoders;
namespace ExceptionHandlerSample namespace ExceptionHandlerSample
{ {
@ -26,7 +26,7 @@ namespace ExceptionHandlerSample
if (error != null) if (error != null)
{ {
// This error would not normally be exposed to the client // This error would not normally be exposed to the client
await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.HtmlEncode(error.Error.Message) + "<br>\r\n"); await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n");
} }
await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n"); await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n");
await context.Response.WriteAsync("</body></html>\r\n"); await context.Response.WriteAsync("</body></html>\r\n");

View File

@ -4,12 +4,12 @@
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics; using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.Extensions.WebEncoders;
namespace StatusCodePagesSample namespace StatusCodePagesSample
{ {
@ -63,11 +63,11 @@ namespace StatusCodePagesSample
{ {
var builder = new StringBuilder(); var builder = new StringBuilder();
builder.AppendLine("<html><body>"); builder.AppendLine("<html><body>");
builder.AppendLine("An error occurred, Status Code: " + HtmlEncoder.Default.HtmlEncode(context.Request.Path.ToString().Substring(1)) + "<br>"); builder.AppendLine("An error occurred, Status Code: " + HtmlEncoder.Default.Encode(context.Request.Path.ToString().Substring(1)) + "<br>");
var referrer = context.Request.Headers["referer"]; var referrer = context.Request.Headers["referer"];
if (!string.IsNullOrEmpty(referrer)) if (!string.IsNullOrEmpty(referrer))
{ {
builder.AppendLine("<a href=\"" + HtmlEncoder.Default.HtmlEncode(referrer) + "\">Retry " + WebUtility.HtmlEncode(referrer) + "</a><br>"); builder.AppendLine("<a href=\"" + HtmlEncoder.Default.Encode(referrer) + "\">Retry " + WebUtility.HtmlEncode(referrer) + "</a><br>");
} }
builder.AppendLine("</body></html>"); builder.AppendLine("</body></html>");
context.Response.ContentType = "text/html"; context.Response.ContentType = "text/html";
@ -81,8 +81,8 @@ namespace StatusCodePagesSample
var builder = new StringBuilder(); var builder = new StringBuilder();
builder.AppendLine("<html><body>"); builder.AppendLine("<html><body>");
builder.AppendLine("<a href=\"" + builder.AppendLine("<a href=\"" +
HtmlEncoder.Default.HtmlEncode(context.Request.PathBase.ToString()) + "/missingpage/\">" + HtmlEncoder.Default.Encode(context.Request.PathBase.ToString()) + "/missingpage/\">" +
HtmlEncoder.Default.HtmlEncode(context.Request.PathBase.ToString()) + "/missingpage/</a><br>"); HtmlEncoder.Default.Encode(context.Request.PathBase.ToString()) + "/missingpage/</a><br>");
var space = string.Concat(Enumerable.Repeat("&nbsp;", 12)); var space = string.Concat(Enumerable.Repeat("&nbsp;", 12));
builder.AppendFormat("<br><b>{0}{1}{2}</b><br>", "Status Code", space, "Status Code Pages"); builder.AppendFormat("<br><b>{0}{1}{2}</b><br>", "Status Code", space, "Status Code Pages");

View File

@ -31,6 +31,6 @@ namespace Microsoft.AspNet.Diagnostics.Elm
public QueryString Query { get; set; } public QueryString Query { get; set; }
public IReadableStringCollection Cookies { get; set; } public IRequestCookieCollection Cookies { get; set; }
} }
} }

View File

@ -34,12 +34,12 @@ using Microsoft.AspNet.Diagnostics.Entity.Views
public string UrlEncode(string content) public string UrlEncode(string content)
{ {
return UrlEncoder.UrlEncode(content); return UrlEncoder.Encode(content);
} }
public string JavaScriptEncode(string content) public string JavaScriptEncode(string content)
{ {
return JavaScriptStringEncoder.JavaScriptStringEncode(content); return JavaScriptEncoder.Encode(content);
} }
#line default #line default

View File

@ -13,12 +13,12 @@
public string UrlEncode(string content) public string UrlEncode(string content)
{ {
return UrlEncoder.UrlEncode(content); return UrlEncoder.Encode(content);
} }
public string JavaScriptEncode(string content) public string JavaScriptEncode(string content)
{ {
return JavaScriptStringEncoder.JavaScriptStringEncode(content); return JavaScriptEncoder.Encode(content);
} }
} }
<!DOCTYPE html> <!DOCTYPE html>

View File

@ -27,13 +27,13 @@ namespace Microsoft.AspNet.Diagnostics.Views
/// Parsed query data. /// Parsed query data.
/// </summary> /// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
public IReadableStringCollection Query { get; set; } public IQueryCollection Query { get; set; }
/// <summary> /// <summary>
/// Request cookies. /// Request cookies.
/// </summary> /// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
public IReadableStringCollection Cookies { get; set; } public IRequestCookieCollection Cookies { get; set; }
/// <summary> /// <summary>
/// Request headers. /// Request headers.

View File

@ -9,6 +9,7 @@ using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.Extensions.WebEncoders; using Microsoft.Extensions.WebEncoders;
@ -43,17 +44,17 @@ namespace Microsoft.AspNet.Diagnostics.Views
/// <summary> /// <summary>
/// Html encoder used to encode content. /// Html encoder used to encode content.
/// </summary> /// </summary>
protected IHtmlEncoder HtmlEncoder { get; set; } protected HtmlEncoder HtmlEncoder { get; set; }
/// <summary> /// <summary>
/// Url encoder used to encode content. /// Url encoder used to encode content.
/// </summary> /// </summary>
protected IUrlEncoder UrlEncoder { get; set; } protected UrlEncoder UrlEncoder { get; set; }
/// <summary> /// <summary>
/// JavaScript encoder used to encode content. /// JavaScript encoder used to encode content.
/// </summary> /// </summary>
protected IJavaScriptStringEncoder JavaScriptStringEncoder { get; set; } protected JavaScriptEncoder JavaScriptEncoder { get; set; }
/// <summary> /// <summary>
/// Execute an individual request /// Execute an individual request
@ -67,7 +68,7 @@ namespace Microsoft.AspNet.Diagnostics.Views
Output = new StreamWriter(Response.Body, Encoding.UTF8, 4096, leaveOpen: true); Output = new StreamWriter(Response.Body, Encoding.UTF8, 4096, leaveOpen: true);
HtmlEncoder = context.ApplicationServices.GetHtmlEncoder(); HtmlEncoder = context.ApplicationServices.GetHtmlEncoder();
UrlEncoder = context.ApplicationServices.GetUrlEncoder(); UrlEncoder = context.ApplicationServices.GetUrlEncoder();
JavaScriptStringEncoder = context.ApplicationServices.GetJavaScriptStringEncoder(); JavaScriptEncoder = context.ApplicationServices.GetJavaScriptEncoder();
await ExecuteAsync(); await ExecuteAsync();
Output.Dispose(); Output.Dispose();
} }
@ -272,7 +273,7 @@ namespace Microsoft.AspNet.Diagnostics.Views
/// <param name="value">The <see cref="string"/> to write.</param> /// <param name="value">The <see cref="string"/> to write.</param>
protected void WriteTo(TextWriter writer, string value) protected void WriteTo(TextWriter writer, string value)
{ {
WriteLiteralTo(writer, HtmlEncoder.HtmlEncode(value)); WriteLiteralTo(writer, HtmlEncoder.Encode(value));
} }
/// <summary> /// <summary>
@ -308,7 +309,7 @@ namespace Microsoft.AspNet.Diagnostics.Views
return string.Join("<br />" + Environment.NewLine, return string.Join("<br />" + Environment.NewLine,
input.Split(new[] { "\r\n" }, StringSplitOptions.None) input.Split(new[] { "\r\n" }, StringSplitOptions.None)
.SelectMany(s => s.Split(new[] { '\r', '\n' }, StringSplitOptions.None)) .SelectMany(s => s.Split(new[] { '\r', '\n' }, StringSplitOptions.None))
.Select(HtmlEncoder.HtmlEncode)); .Select(HtmlEncoder.Encode));
} }
} }
} }

View File

@ -10,10 +10,10 @@
"Microsoft.AspNet.FileProviders.Physical": "1.0.0-*", "Microsoft.AspNet.FileProviders.Physical": "1.0.0-*",
"Microsoft.AspNet.Http.Extensions": "1.0.0-*", "Microsoft.AspNet.Http.Extensions": "1.0.0-*",
"Microsoft.AspNet.WebUtilities": "1.0.0-*", "Microsoft.AspNet.WebUtilities": "1.0.0-*",
"Microsoft.Extensions.Compilation.Abstractions": "1.0.0-*",
"Microsoft.Extensions.Logging.Abstractions": "1.0.0-*", "Microsoft.Extensions.Logging.Abstractions": "1.0.0-*",
"Microsoft.Extensions.OptionsModel": "1.0.0-*", "Microsoft.Extensions.OptionsModel": "1.0.0-*",
"Microsoft.Extensions.Compilation.Abstractions": "1.0.0-*", "Microsoft.Extensions.WebEncoders": "1.0.0-*",
"Microsoft.Extensions.WebEncoders.Core": "1.0.0-*",
"System.Diagnostics.DiagnosticSource": "4.0.0-beta-*" "System.Diagnostics.DiagnosticSource": "4.0.0-beta-*"
}, },
"frameworks": { "frameworks": {

View File

@ -7,6 +7,7 @@ using System.Data.SqlClient;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Text.Encodings.Web;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics.Entity.FunctionalTests.Helpers; using Microsoft.AspNet.Diagnostics.Entity.FunctionalTests.Helpers;
@ -18,7 +19,6 @@ using Microsoft.Data.Entity;
using Microsoft.Data.Entity.Infrastructure; using Microsoft.Data.Entity.Infrastructure;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.WebEncoders;
using Xunit; using Xunit;
namespace Microsoft.AspNet.Diagnostics.Entity.Tests namespace Microsoft.AspNet.Diagnostics.Entity.Tests
@ -209,7 +209,7 @@ namespace Microsoft.AspNet.Diagnostics.Entity.Tests
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
// Ensure the url we're going to test is what the page is using in it's JavaScript // Ensure the url we're going to test is what the page is using in it's JavaScript
var javaScriptEncoder = new JavaScriptStringEncoder(); var javaScriptEncoder = JavaScriptEncoder.Default;
Assert.Contains("req.open(\"POST\", \"" + JavaScriptEncode(expectedMigrationsEndpoint) + "\", true);", content); Assert.Contains("req.open(\"POST\", \"" + JavaScriptEncode(expectedMigrationsEndpoint) + "\", true);", content);
Assert.Contains("var formBody = \"context=" + JavaScriptEncode(UrlEncode(expectedContextType)) + "\";", content); Assert.Contains("var formBody = \"context=" + JavaScriptEncode(UrlEncode(expectedContextType)) + "\";", content);
@ -436,16 +436,16 @@ namespace Microsoft.AspNet.Diagnostics.Entity.Tests
} }
} }
private static UrlEncoder _urlEncoder = new UrlEncoder(); private static UrlEncoder _urlEncoder = UrlEncoder.Default;
private static string UrlEncode(string content) private static string UrlEncode(string content)
{ {
return _urlEncoder.UrlEncode(content); return _urlEncoder.Encode(content);
} }
private static JavaScriptStringEncoder _javaScriptEncoder = new JavaScriptStringEncoder(); private static JavaScriptEncoder _javaScriptEncoder = JavaScriptEncoder.Default;
private static string JavaScriptEncode(string content) private static string JavaScriptEncode(string content)
{ {
return _javaScriptEncoder.JavaScriptStringEncode(content); return _javaScriptEncoder.Encode(content);
} }
} }
} }

View File

@ -207,10 +207,10 @@ namespace Microsoft.AspNet.Diagnostics.Tests
.Returns(new QueryString()); .Returns(new QueryString());
contextMock contextMock
.SetupGet(c => c.Request.Query) .SetupGet(c => c.Request.Query)
.Returns(new Mock<IReadableStringCollection>().Object); .Returns(new Mock<IQueryCollection>().Object);
contextMock contextMock
.SetupGet(c => c.Request.Cookies) .SetupGet(c => c.Request.Cookies)
.Returns(new Mock<IReadableStringCollection>().Object); .Returns(new Mock<IRequestCookieCollection>().Object);
contextMock contextMock
.Setup(c => c.Request.ReadFormAsync(It.IsAny<System.Threading.CancellationToken>())) .Setup(c => c.Request.ReadFormAsync(It.IsAny<System.Threading.CancellationToken>()))
.Returns(Task.FromResult(new Mock<IFormCollection>().Object)); .Returns(Task.FromResult(new Mock<IFormCollection>().Object));

View File

@ -7,12 +7,13 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions; using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Extensions.WebEncoders; using Microsoft.Extensions.WebEncoders.Testing;
#if DNX451 #if DNX451
using Moq; using Moq;
#endif #endif
@ -204,7 +205,7 @@ namespace Microsoft.AspNet.Diagnostics.Tests
contextMock contextMock
.SetupGet(c => c.ApplicationServices) .SetupGet(c => c.ApplicationServices)
.Returns(new ServiceCollection(). .Returns(new ServiceCollection().
AddInstance<IHtmlEncoder>(new CustomHtmlEncoder()). AddInstance<HtmlEncoder>(new HtmlTestEncoder()).
BuildServiceProvider()); BuildServiceProvider());
// Act // Act
@ -213,29 +214,11 @@ namespace Microsoft.AspNet.Diagnostics.Tests
// Assert // Assert
string response = Encoding.UTF8.GetString(buffer); string response = Encoding.UTF8.GetString(buffer);
Assert.True(response.Contains("<td>[LibInfo1]</td>")); Assert.True(response.Contains("<td>HtmlEncode[[LibInfo1]]</td>"));
Assert.True(response.Contains("<td>[1.0.0-beta1]</td>")); Assert.True(response.Contains("<td>HtmlEncode[[1.0.0-beta1]]</td>"));
Assert.True(response.Contains("<td>[Path1]</td>")); Assert.True(response.Contains("<td>HtmlEncode[[Path1]]</td>"));
} }
} }
#endif #endif
private class CustomHtmlEncoder : IHtmlEncoder
{
public string HtmlEncode(string value)
{
return "[" + value + "]";
}
public void HtmlEncode(string value, int startIndex, int charCount, TextWriter output)
{
throw new NotImplementedException();
}
public void HtmlEncode(char[] value, int startIndex, int charCount, TextWriter output)
{
throw new NotImplementedException();
}
}
} }
} }