Я пытаюсь работать с классом HttpListener
с C#, и кажется, что он отправляет нежелательный заголовок Set-Cookie, не допуская отправки файлов cookie.HttpListenerResponse добавление нежелательного заголовка Set-Cookie
Имея HttpListenerContext context
, запрос обрабатывается каким-либо образом, то часть ответа кажется, что:
if (responseHeaders != null)
foreach (string header in responseHeaders.Keys)
context.Response.Headers.Add(header, responseHeaders[header]);
for (int i = 0; i < responseCookies.Count; i++)
{
context.Response.Headers.Add("Set-Cookie", responseCookies[i].ToHeaderString());
}
oWrite(response, responseEncoding);
oClose();
И мой метод расширения, ToHeaderString()
:
public static string ToHeaderString(this Cookie c)
{
string s = c.Name + "=" + c.Value;
if (c.Path != null && c.Path != string.Empty)
{
s += "; path=" + c.Path;
}
if (c.Domain != null && c.Domain != string.Empty)
{
s += "; domain=" + c.Domain;
}
if (c.Expires != null)
{
s += "; expires=" + c.Expires.ToString("ddd, d MMM yyyy HH:mm:ss", new CultureInfo("en-US")) + " GMT";
}
return s;
}
responseHeaders
имеет тип Dictionary<string, string>
, и responseCookies
имеет тип CookieCollection
. Они оба заполнены заголовками и куки, которые будут отправлены клиенту.
Cookie userCookie = new Cookie("username", _GET["__username"], "/");
userCookie.Expires = DateTime.Now.AddDays(10);
_CONNECTION.responseCookies.Add(userCookie);
Cookie userSession = new Cookie("session", ses, "/");
userSession.Expires = DateTime.Now.AddDays(10);
_CONNECTION.responseCookies.Add(userCockie);
_CONNECTION.responseCookies.Add(userSession);
Тем не менее, ответ я вижу в том, что:
Date:Wed, 19 Oct 2016 11:33:21 GMT
Server:Microsoft-HTTPAPI/2.0
Set-Cookie:username=yotam180; Max-Age=863999; Path=/, session=XCDbRv0fqbUwWC9g9xXL; Max-Age=863999; Path=/
Transfer-Encoding:chunked
Что я здесь делаю неправильно? Не правильно ли я использую заголовки HttpListenerResponse
?
Спасибо!
Редактировать Я также пробовал использовать context.Response.Cookies.Add (..), но также и без успеха. Это правильный способ сделать это? Или есть какой-нибудь трюк, который можно использовать здесь?