2016-04-27 3 views
3

Я конвертирую приложение веб-форм в asp.net core mvc. В моем приложении для веб-форм иногда после того, как я установил некоторые куки ответов, другим кодам нужно выяснить, были ли они установлены, и если да, обратитесь к свойствам файла cookie (т. Е. Значение, Expires, Secure, http). В WebForms и MVC 5 это можно перебирать печенье и вернуть определенные куки, как так (старой школы, я знаю)Как проверить файл cookie ответа в Asp.net Core MVC (aka Asp.Net 5 RC1)?

 for(int i = 0; i < cookies.Count; i++) { 
      if(cookies[i].Name == cookieName) { 
       return cookies[i]; 
      } 
     } 

Но интерфейс для доступа к куки ответа на основной asp.net MVC выглядит следующим образом:

response cookies interface

на основе этого интерфейса я не вижу способ проверить, чтобы увидеть, если печенье ответ существует и получить его свойства. Но должен ли быть какой-то способ сделать это?

В методе действий я попытался установить два файла cookie на объект ответа, а затем сразу же попытался получить к ним доступ. Но IntelliSense не показывает каких-либо методов, свойств или индексаторов, которые позволили бы мне получить доступ к ним:

enter image description here

На мгновение я подумал, что, возможно, я мог бы использовать Response.Cookies.ToString(); и просто проанализировать информацию, чтобы найти мой печенье info, но, увы, вызов ToString() возвращает «Microsoft.AspNet.Http.Internal.ResponseCookies», потому что объект не переопределяет реализацию по умолчанию.

Просто для удовольствия я также проверил текущую ветвь dev GitHub, чтобы увидеть, изменился ли интерфейс с RC1, но это не так. Итак, учитывая этот интерфейс, как я могу проверить наличие cookie-ответа и получить его свойства? Я думал о попытке взломать через коллекцию заголовков ответов, но это кажется довольно хромым.

+0

Вы пробовали «Response.Cookies» в своем методе действий? –

+0

У меня будет. Я уточню вопрос, чтобы указать на это. –

+0

О, извините. Я имел в виду «Request.Cookies», мою ошибку! –

ответ

1

Вот как я получаю value из файла cookie из ответа. Что-то вроде этого можно было бы использовать для получения всего файла cookie, если необходимо:

string GetCookieValueFromResponse(HttpResponse response, string cookieName) 
{ 
    foreach (var headers in response.Headers.Values) 
    foreach (var header in headers) 
     if (header.StartsWith(cookieName)) 
     { 
     var p1 = header.IndexOf('='); 
     var p2 = header.IndexOf(';'); 
     return header.Substring(p1 + 1, p2 - p1 - 1); 
     } 
    return null; 
}