mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-27 11:17:31 +02:00
Restricted ResponseHeaders (#126)
This commit is contained in:
@@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using WireMock.Http;
|
||||||
using WireMock.Util;
|
using WireMock.Util;
|
||||||
#if !NETSTANDARD
|
#if !NETSTANDARD
|
||||||
using Microsoft.Owin;
|
using Microsoft.Owin;
|
||||||
@@ -21,17 +22,27 @@ namespace WireMock.Owin
|
|||||||
{
|
{
|
||||||
private readonly Encoding _utf8NoBom = new UTF8Encoding(false);
|
private readonly Encoding _utf8NoBom = new UTF8Encoding(false);
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/239725/cannot-set-some-http-headers-when-using-system-net-webrequest
|
// https://msdn.microsoft.com/en-us/library/78h415ay(v=vs.110).aspx
|
||||||
#if !NETSTANDARD
|
#if !NETSTANDARD
|
||||||
private static readonly IDictionary<string, Action<IOwinResponse, WireMockList<string>>> RestrictedResponseHeaders = new Dictionary<string, Action<IOwinResponse, WireMockList<string>>>(StringComparer.OrdinalIgnoreCase) {
|
private static readonly IDictionary<string, Action<IOwinResponse, WireMockList<string>>> RestrictedResponseHeaders = new Dictionary<string, Action<IOwinResponse, WireMockList<string>>>(StringComparer.OrdinalIgnoreCase) {
|
||||||
#else
|
#else
|
||||||
private static readonly IDictionary<string, Action<HttpResponse, WireMockList<string>>> RestrictedResponseHeaders = new Dictionary<string, Action<HttpResponse, WireMockList<string>>>(StringComparer.OrdinalIgnoreCase) {
|
private static readonly IDictionary<string, Action<HttpResponse, WireMockList<string>>> RestrictedResponseHeaders = new Dictionary<string, Action<HttpResponse, WireMockList<string>>>(StringComparer.OrdinalIgnoreCase) {
|
||||||
#endif
|
#endif
|
||||||
{ "Content-Length", null },
|
{ HttpKnownHeaderNames.Accept, null },
|
||||||
{ "Content-Type", (r, v) => r.ContentType = v.FirstOrDefault() },
|
{ HttpKnownHeaderNames.Connection, null },
|
||||||
{ "Keep-Alive", null },
|
{ HttpKnownHeaderNames.ContentLength, null },
|
||||||
{ "Transfer-Encoding", null },
|
{ HttpKnownHeaderNames.ContentType, (r, v) => r.ContentType = v.FirstOrDefault() },
|
||||||
{ "WWW-Authenticate", null }
|
{ HttpKnownHeaderNames.Date, null },
|
||||||
|
{ HttpKnownHeaderNames.Expect, null },
|
||||||
|
{ HttpKnownHeaderNames.Host, null },
|
||||||
|
{ HttpKnownHeaderNames.IfModifiedSince, null },
|
||||||
|
{ HttpKnownHeaderNames.KeepAlive, null },
|
||||||
|
{ HttpKnownHeaderNames.Range, null },
|
||||||
|
{ HttpKnownHeaderNames.Referer, null },
|
||||||
|
{ HttpKnownHeaderNames.TransferEncoding, null },
|
||||||
|
{ HttpKnownHeaderNames.UserAgent, null },
|
||||||
|
{ HttpKnownHeaderNames.ProxyConnection, null },
|
||||||
|
{ HttpKnownHeaderNames.WWWAuthenticate, null }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -545,6 +545,24 @@ namespace WireMock.Net.Tests
|
|||||||
Check.That(response).IsEqualTo("/fooBar");
|
Check.That(response).IsEqualTo("/fooBar");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task FluentMockServer_Should_IgnoreRestrictedHeader()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
_server = FluentMockServer.Start();
|
||||||
|
_server
|
||||||
|
.Given(Request.Create().WithPath("/head").UsingHead())
|
||||||
|
.RespondWith(Response.Create().WithHeader("Content-Length", "1024"));
|
||||||
|
|
||||||
|
var request = new HttpRequestMessage(HttpMethod.Head, "http://localhost:" + _server.Ports[0] + "/head");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var response = await new HttpClient().SendAsync(request);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(response.Content.Headers.GetValues("Content-Length")).ContainsExactly("0");
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_server?.Stop();
|
_server?.Stop();
|
||||||
|
|||||||
26
test/WireMock.Net.Tests/ResponseTests.cs
Normal file
26
test/WireMock.Net.Tests/ResponseTests.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using NFluent;
|
||||||
|
using WireMock.ResponseBuilders;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace WireMock.Net.Tests
|
||||||
|
{
|
||||||
|
public class ResponseTests
|
||||||
|
{
|
||||||
|
private const string ClientIp = "::1";
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async void Response_Create_WithHeader_ContentLength()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var requestMock = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp);
|
||||||
|
IResponseBuilder builder = Response.Create().WithHeader("Content-Length", "1024");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var response = await builder.ProvideResponseAsync(requestMock);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(response.Headers["Content-Length"].ToString()).Equals("1024");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user