Skip to content

Commit 6939780

Browse files
Tobias Mønstertpeczek
authored andcommitted
Handle wildcard headers
Update ServerSentEventsMiddleware.cs
1 parent f2ab4e6 commit 6939780

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

Lib.AspNetCore.ServerSentEvents/ServerSentEventsMiddleware.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ public async Task Invoke(HttpContext context, IPolicyEvaluator policyEvaluator)
114114
}
115115
}
116116

117+
private static readonly string[] AcceptedHeaders = new[] { "*/*", "text/*", Constants.SSE_CONTENT_TYPE };
118+
117119
private bool CheckAcceptHeader(IHeaderDictionary requestHeaders)
118120
{
119121
if (!requestHeaders.ContainsKey(Constants.ACCEPT_HTTP_HEADER))
@@ -126,7 +128,7 @@ private bool CheckAcceptHeader(IHeaderDictionary requestHeaders)
126128
return !_serverSentEventsOptions.RequireAcceptHeader;
127129
}
128130

129-
if (requestHeaders.GetCommaSeparatedValues(Constants.ACCEPT_HTTP_HEADER).Any(acceptHeaderValue => acceptHeaderValue == Constants.SSE_CONTENT_TYPE))
131+
if (requestHeaders.GetCommaSeparatedValues(Constants.ACCEPT_HTTP_HEADER).Any(acceptHeaderValue => AcceptedHeaders.Contains(acceptHeaderValue)))
130132
{
131133
return true;
132134
}

Test.AspNetCore.ServerSentEvents/Unit/Middleware/HandshakeTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ public async Task Invoke_SseRequestWithMultipleAcceptHeadersWithNotEventStreamAc
9595
Assert.Null(context.Response.ContentType);
9696
}
9797

98+
99+
[Theory]
100+
[InlineData("*/*")]
101+
[InlineData("text/*")]
102+
[InlineData(SSE_CONTENT_TYPE)]
103+
public async Task Invoke_SseRequestWithAcceptedHeader_Accepts(string header)
104+
{
105+
ServerSentEventsMiddleware<ServerSentEventsService> serverSentEventsMiddleware = SubjectUnderTestHelper.PrepareServerSentEventsMiddleware();
106+
HttpContext context = SubjectUnderTestHelper.PrepareHttpContext(acceptHeaderValue: header);
107+
108+
await serverSentEventsMiddleware.Invoke(context, null);
109+
110+
Assert.Equal(SSE_CONTENT_TYPE, context.Response.ContentType);
111+
}
112+
98113
#endregion
99114
}
100115
}

0 commit comments

Comments
 (0)