diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs
index e0e07c64..56664493 100644
--- a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs
+++ b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs
@@ -86,17 +86,19 @@ namespace WireMock.Matchers.Request
private double IsMatch(RequestMessage requestMessage)
{
- if (Funcs != null)
- return MatchScores.ToScore(requestMessage.Cookies != null && Funcs.Any(cf => cf(requestMessage.Cookies)));
-
if (requestMessage.Cookies == null)
return MatchScores.Mismatch;
+ if (Funcs != null)
+ return MatchScores.ToScore(Funcs.Any(f => f(requestMessage.Cookies)));
+
+ if (Matchers == null)
+ return MatchScores.Mismatch;
+
if (!requestMessage.Cookies.ContainsKey(Name))
return MatchScores.Mismatch;
string value = requestMessage.Cookies[Name];
-
return Matchers.Max(m => m.IsMatch(value));
}
}
diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs
index 24c3c7da..7127f324 100644
--- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs
+++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs
@@ -86,18 +86,20 @@ namespace WireMock.Matchers.Request
private double IsMatch(RequestMessage requestMessage)
{
- if (Funcs != null)
- return MatchScores.ToScore(requestMessage.Headers != null && Funcs.Any(hf => hf(requestMessage.Headers)));
-
if (requestMessage.Headers == null)
return MatchScores.Mismatch;
+ if (Funcs != null)
+ return MatchScores.ToScore(Funcs.Any(f => f(requestMessage.Headers)));
+
+ if (Matchers == null)
+ return MatchScores.Mismatch;
+
if (!requestMessage.Headers.ContainsKey(Name))
return MatchScores.Mismatch;
- string headerValue = requestMessage.Headers[Name];
-
- return Matchers.Max(m => m.IsMatch(headerValue));
+ string value = requestMessage.Headers[Name];
+ return Matchers.Max(m => m.IsMatch(value));
}
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs
index 2f215c27..942b123b 100644
--- a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs
+++ b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs
@@ -36,10 +36,9 @@ namespace WireMock.Matchers.Request
///
/// The values.
///
- public RequestMessageParamMatcher([NotNull] string key, [NotNull] IEnumerable values)
+ public RequestMessageParamMatcher([NotNull] string key, [CanBeNull] IEnumerable values)
{
Check.NotNull(key, nameof(key));
- Check.NotNull(values, nameof(values));
Key = key;
Values = values;
diff --git a/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs
index 5aa52039..c979b91e 100644
--- a/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs
+++ b/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs
@@ -35,13 +35,13 @@ namespace WireMock.RequestBuilders
///
/// The body string function.
/// The .
- IRequestBuilder WithBody(Func body);
+ IRequestBuilder WithBody([NotNull] Func body);
///
/// The with body byte[] func.
///
/// The body byte[] function.
/// The .
- IRequestBuilder WithBody(Func body);
+ IRequestBuilder WithBody([NotNull] Func body);
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/RequestBuilders/IParamsRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IParamsRequestBuilder.cs
index fb7ba015..590eefa8 100644
--- a/src/WireMock.Net/RequestBuilders/IParamsRequestBuilder.cs
+++ b/src/WireMock.Net/RequestBuilders/IParamsRequestBuilder.cs
@@ -16,7 +16,7 @@ namespace WireMock.RequestBuilders
/// The key.
/// The values.
/// The .
- IRequestBuilder WithParam([NotNull] string key, params string[] values);
+ IRequestBuilder WithParam([NotNull] string key, [CanBeNull] params string[] values);
///
/// The with parameters.
diff --git a/src/WireMock.Net/RequestBuilders/Request.cs b/src/WireMock.Net/RequestBuilders/Request.cs
index cee17dda..144a2adf 100644
--- a/src/WireMock.Net/RequestBuilders/Request.cs
+++ b/src/WireMock.Net/RequestBuilders/Request.cs
@@ -5,6 +5,7 @@ using System.Linq;
using WireMock.Matchers;
using WireMock.Matchers.Request;
using WireMock.Util;
+using WireMock.Validation;
namespace WireMock.RequestBuilders
{
@@ -60,6 +61,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithPath(params IMatcher[] matchers)
{
+ Check.NotEmpty(matchers, nameof(matchers));
+
_requestMatchers.Add(new RequestMessagePathMatcher(matchers));
return this;
}
@@ -71,6 +74,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithPath(params string[] paths)
{
+ Check.NotEmpty(paths, nameof(paths));
+
_requestMatchers.Add(new RequestMessagePathMatcher(paths));
return this;
}
@@ -82,6 +87,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithPath(params Func[] funcs)
{
+ Check.NotEmpty(funcs, nameof(funcs));
+
_requestMatchers.Add(new RequestMessagePathMatcher(funcs));
return this;
}
@@ -89,11 +96,13 @@ namespace WireMock.RequestBuilders
///
/// The with url.
///
- /// The matcher.
+ /// The matchers.
/// The .
- public IRequestBuilder WithUrl(params IMatcher[] matcher)
+ public IRequestBuilder WithUrl(params IMatcher[] matchers)
{
- _requestMatchers.Add(new RequestMessageUrlMatcher(matcher));
+ Check.NotEmpty(matchers, nameof(matchers));
+
+ _requestMatchers.Add(new RequestMessageUrlMatcher(matchers));
return this;
}
@@ -104,6 +113,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithUrl(params string[] urls)
{
+ Check.NotEmpty(urls, nameof(urls));
+
_requestMatchers.Add(new RequestMessageUrlMatcher(urls));
return this;
}
@@ -115,6 +126,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithUrl(params Func[] funcs)
{
+ Check.NotEmpty(funcs, nameof(funcs));
+
_requestMatchers.Add(new RequestMessageUrlMatcher(funcs));
return this;
}
@@ -201,6 +214,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder UsingVerb(params string[] verbs)
{
+ Check.NotEmpty(verbs, nameof(verbs));
+
_requestMatchers.Add(new RequestMessageMethodMatcher(verbs));
return this;
}
@@ -240,6 +255,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithBody(Func func)
{
+ Check.NotNull(func, nameof(func));
+
_requestMatchers.Add(new RequestMessageBodyMatcher(func));
return this;
}
@@ -253,6 +270,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithBody(Func func)
{
+ Check.NotNull(func, nameof(func));
+
_requestMatchers.Add(new RequestMessageBodyMatcher(func));
return this;
}
@@ -264,6 +283,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithBody(IMatcher matcher)
{
+ Check.NotNull(matcher, nameof(matcher));
+
_requestMatchers.Add(new RequestMessageBodyMatcher(matcher));
return this;
}
@@ -280,6 +301,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithParam(string key, params string[] values)
{
+ Check.NotNull(key, nameof(key));
+
_requestMatchers.Add(new RequestMessageParamMatcher(key, values));
return this;
}
@@ -291,6 +314,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithParam(params Func>, bool>[] funcs)
{
+ Check.NotEmpty(funcs, nameof(funcs));
+
_requestMatchers.Add(new RequestMessageParamMatcher(funcs));
return this;
}
@@ -304,6 +329,9 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithHeader(string name, string pattern, bool ignoreCase = true)
{
+ Check.NotNull(name, nameof(name));
+ Check.NotNull(pattern, nameof(pattern));
+
_requestMatchers.Add(new RequestMessageHeaderMatcher(name, pattern, ignoreCase));
return this;
}
@@ -316,6 +344,9 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithHeader(string name, params IMatcher[] matchers)
{
+ Check.NotNull(name, nameof(name));
+ Check.NotEmpty(matchers, nameof(matchers));
+
_requestMatchers.Add(new RequestMessageHeaderMatcher(name, matchers));
return this;
}
@@ -327,6 +358,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithHeader(params Func, bool>[] funcs)
{
+ Check.NotEmpty(funcs, nameof(funcs));
+
_requestMatchers.Add(new RequestMessageHeaderMatcher(funcs));
return this;
}
@@ -352,6 +385,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithCookie(string name, params IMatcher[] matchers)
{
+ Check.NotEmpty(matchers, nameof(matchers));
+
_requestMatchers.Add(new RequestMessageCookieMatcher(name, matchers));
return this;
}
@@ -363,6 +398,8 @@ namespace WireMock.RequestBuilders
/// The .
public IRequestBuilder WithCookie(params Func, bool>[] funcs)
{
+ Check.NotEmpty(funcs, nameof(funcs));
+
_requestMatchers.Add(new RequestMessageCookieMatcher(funcs));
return this;
}
diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
index 52fc2045..55c2094f 100644
--- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
@@ -85,7 +85,7 @@ namespace WireMock.Server
.WithGuid(guid)
.RespondWith(responseBuilder);
- return new ResponseMessage { Body = "Mapping updated" };
+ return new ResponseMessage { Body = "Mapping added or updated" };
}
private ResponseMessage MappingDelete(RequestMessage requestMessage)