我正在尝试向我的MVC3应用发送请求,我尝试过常规的WebRequest,我正在尝试使用RestSharp应用正确的Authenticator,但它仍然会返回登录页面的重定向结果?
我做错了什么?
upd:我应该如何使用RestSharp进行表单身份验证?我猜它有可能以某种方式 - 只需要玩那个饼干......
答案 0 :(得分:1)
如果您被重定向到登录页面,则必须为表单身份验证设置mvc 3应用程序。表单身份验证将需要随请求一起发送的cookie。如果您在RestSharp中使用基本身份验证器,则无效。我假设您正在使用MVC控制器来提供您尝试调用的REST API。
一种选择是升级到MVC 4并使用ASP.NET Web API开发REST API。 ASP.NET Web API中的授权行为略有不同,因为它将返回HTTP 401错误,而不是执行重定向。您可以自定义AuthorizationAttribute以从HTTP标头中提取信息以进行基本身份验证和授权。
另一个选择是如果控制器上的操作不需要身份验证/授权,您可以将AllowAnonymousAttribute放在方法上。
答案 1 :(得分:0)
要通过Forms身份验证,您必须获取cookie并将其粘贴到RestSharp的cookie容器中。要获取cookie,您可以使用常规的WebRequest。
private Cookie GetAuthCookie(string user, string pass)
{
var http = WebRequest.Create(_baseUrl+"Users/Login") as HttpWebRequest;
http.AllowAutoRedirect = false;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
http.CookieContainer = new CookieContainer();
var postData = "UserName=" + user + "&Password=" + pass + "&RememberMe=true&RememberMe=false&ReturnUrl=www.google.com";
byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (var postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
var httpResponse = http.GetResponse() as HttpWebResponse;
return httpResponse.Cookies[FormsAuthentication.FormsCookieName];
}