Уважаемые форумчане помогите решить проблему.
Есть такой контроллер на WebAPI
public class WebUiController : ApiController
{
[HttpPost]
public HttpResponseMessage Post(LogOnWebUiModel model)
{
if (model.Username == "john" && model.Password == "secret")
{
FormsAuthentication.SetAuthCookie(model.Username, true);
var response = Request.CreateResponse(HttpStatusCode.Created, true);
return response;
}
return Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, false); ;
}
//[Authorize(Users = @"john")]
[Authorize]
public string Get()
{
return "This is a top secret material that only authorized users can see";
}
}
Действие Post проверяет логин и пароль и аутентифицирует пользователя.
Из консольного приложения пытаюсь залогиниться а затем вызвать действие Get
static void Main(string[] args)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://localhost:2898/api/Admin/WebUi/Post");
httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
httpWebRequest.Method = "POST";
httpWebRequest.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
httpWebRequest.KeepAlive = true;
httpWebRequest.Headers.Add("Keep-Alive: 300");
httpWebRequest.AllowAutoRedirect = false;
httpWebRequest.ContentType = "text/json";
CookieContainer cookies = new CookieContainer();
httpWebRequest.CookieContainer = cookies;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
var json =
Newtonsoft.Json.JsonConvert.SerializeObject(new { Username = "john", Password = "secret" });
streamWriter.Write(json);
streamWriter.Close();
using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
CookieCollection colCookie= cookies.GetCookies(new Uri(@"http://localhost:2898/"));
//var httpCookie = httpResponse.Cookies[".ASPXAUTH"];
//string httpHeadCookie = httpResponse.Headers["Set-Cookie"];
//var headers = httpWebRequest.Headers;
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
json = streamReader.ReadToEnd();
if (Convert.ToBoolean(json))
{
httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://localhost:2898/api/Admin/WebUi/Get");
httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
httpWebRequest.KeepAlive = true;
httpWebRequest.Headers.Add("Keep-Alive: 300");
httpWebRequest.ContentType = "text/html";
httpWebRequest.CookieContainer = new CookieContainer();
httpWebRequest.CookieContainer.Add(colCookie[0]);
using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse()) // при вызове данного метода выдает Exeption
// The remote server returned an error: (401) Unauthorized.
{
//stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("windows-1251"));
StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
string htmlStr = stream.ReadToEnd();
}
}
}
}
}
}
Когда атрибут [Authorize] убираю и смотрю пришли ли куки в запрос, да они пришли но с данным атрибутом не пускает.
За 2 дня перечитал огромное количество форумов перепробовал различные варианты ничего не помогает. Что я делаю не так?
Пожалуйста помогите!!