var client = new RestClient("https://seller.digikala.com/Account/Login");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "0e4d8dba-29da-0b26-1b43-1bf974e9b5de");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse response = client.Execute(request);
我可以成功发送请求并在邮递员中登录网站,但我无法在VS中执行此操作。这是我在VS中的代码:
var client = new RestClient("https://seller.digikala.com/Account/Login");
var request = new RestRequest(Method.POST);
request.AddParameter("IsPersistent", true, ParameterType.GetOrPost);
request.AddParameter("Password", "myPass", ParameterType.GetOrPost);
request.AddParameter("UserName", "myUsername", ParameterType.GetOrPost);
request.AddParameter("returnUrl", "/Account/Login", ParameterType.GetOrPost);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse response = client.Execute(request);
但我得到"未经授权的" VS中的消息(401)
答案 0 :(得分:1)
我相信你的问题是你正在添加应该作为身体一部分的东西作为参数(基于PostMan的截图显示这些项目作为身体的一部分)。这是未经测试但可能适合您。
var client = new RestClient("https://seller.digikala.com/Account/Login");
var request = new RestRequest(Method.POST);
request.AddBody(new
{
IsPersistant = true,
Password = "myPass",
UserName = "myUsername",
returnUrl = "/Account/Login"
});
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse response = client.Execute(request);
答案 1 :(得分:0)
您可能需要首先执行GET
页面,然后在制作时POST
反映GET期间收到的所有Cookie(如果您的RestClient不自动执行此操作)。
登录页面通常在GET期间添加一个cookie,并期望在POST期间使用cookie来防止XSRF(这涉及包含与表单隐藏字段相同的标记,尽管XSRF标记显然不存在于Postman有效负载中)。即使在您的请求到达登录控制器/中间件之前,一些基于cookie的sessionID过滤器也会阻止您,这也不足为奇。在任何情况下,首先执行GET然后在POST中反映cookie应该有效。