将邮递员代码转换为常规C#代码
我可以成功发送请求并在postman中登录到站点,但我无法在VS中完成。这是我在VS中的代码:将邮递员代码转换为常规C#代码,c#,visual-studio,postman,C#,Visual Studio,Postman,我可以成功发送请求并在postman中登录到站点,但我无法在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.AddPar
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)。我相信你的问题是你添加了一些应该作为身体一部分的东西作为参数(根据邮递员显示这些东西作为身体一部分的屏幕截图)。这是未经测试,但可能会为你工作
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);
您可能需要首先对页面执行
GET
,然后在执行POST
时反射在GET期间收到的所有cookie(如果您的RestClient没有自动执行此操作)
登录页面通常在GET期间添加cookie,并期望在POST期间使用cookie来防止XSRF(这涉及到将同一标记作为表单的隐藏字段,尽管XSRF标记显然不存在于邮递员负载中)。即使在您的请求到达登录控制器/中间件之前,一些基于cookie的sessionID过滤器也会阻止您,这也不会让我感到惊讶。在任何情况下,先执行GET,然后在POST中反映cookies都应该有效。有错误吗?返回信息消息?@andrewb我无法在vs中执行此操作并获取未经授权的消息(401)为vs和Postman运行fiddler跟踪,并检查负载差异。想一想,尝试在C代码中添加用户代理标头。当request.AddBody命中时,我会出现此错误“名称不能以‘这到底发生在哪里?’?听起来你在传递无效字符。当addBody点击时。但是添加
request.RequestFormat=DataFormat.Json代码>在addBody之前修复此错误。虽然我得到了401错误。但是我使用postman interceptor跟踪登录,表单中没有任何antiforgerytoken字段。可能是这样,我甚至说您的postman屏幕截图没有显示,但其他cookie可能仍然很重要。
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);