ano*_*428 4 c# authentication http-post restsharp
我正在尝试将用户名和密码传递到以下 URL:
https://maxcvservices.dnb.com/rest/Authentication
Run Code Online (Sandbox Code Playgroud)
根据文档,user_id 和密码必须作为标头传递,并分别带有键:x-dnb-user、x-dnb-pwd。
到目前为止,我有以下代码似乎可以工作,但我无法检索响应对象返回的身份验证令牌:
public static void Main (string[] args)
{
var client = new RestClient ("https://maxcvservices.dnb.com/rest/Authentication");
var request = new RestRequest (Method.POST);
request.AddHeader("x-dnb-user", myEmail);
request.AddHeader("x-dnb-pwd", myPassword);
IRestResponse resp = client.Execute(request);
var content = resp.Content;
Console.WriteLine (resp.StatusDescription);
Console.WriteLine (resp.StatusCode);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试打印内容时,我得到一个空行,但我实际上期望的是服务返回的身份验证令牌。我认为我在代码中做的几件事(但不确定)是将用户 ID 和密码作为 POST 请求中的标头传递,这是所需的。该令牌作为响应对象中“授权”字段的值返回。我想知道如何打印令牌。另外,statusDescription、statusCode 都打印 OK,这告诉我我有正确的请求,但无法在响应中找到身份验证令牌。如果能指导我如何访问返回的 POST 响应的授权字段中的身份验证令牌,我们将不胜感激。
那么您想从对象中获取HttpHeader
值吗?Authorization
IRestResponse
您可以使用 LINQ 来实现:
var authroizationHeaderFromResponse = resp.Headers.FirstOrDefault(h => h.Name == "Authorization");
if (authroizationHeaderFromResponse != null)
{
Console.WriteLine(authroizationHeaderFromResponse.Value);
}
Run Code Online (Sandbox Code Playgroud)
哪个产量
INVALID CREDENTIALS
Run Code Online (Sandbox Code Playgroud)
您假设如果响应状态代码为200 - OK
,则必须有一个伴随它的响应正文。
文档是否明确指出您应该期望在响应正文中返回一个令牌?
如果D&B 开发人员200 - OK
愿意,他们可以发送不带响应正文的响应,或者他们可以在其他位置(例如标头字段)添加序列化令牌(JSON、XML 等)。
可以在 ASP.NET Web API 的代码中看到这样的示例,该代码从成功的 PUT 返回响应
if (result.Success)
{
var dto = Mapper.Map<TEntity, TDto>(result.Data as TEntity);
var response = Request.CreateResponse(HttpStatusCode.Created, dto);
var uri = Url.Link("DefaultApi", new {id = dto.Id});
response.Headers.Location = new Uri(uri);
return response;
}
Run Code Online (Sandbox Code Playgroud)
这将返回 200 - OK,响应正文中包含序列化对象(result.Data),但我更改以下内容没有任何问题
var response = Request.CreateResponse(HttpStatusCode.Created, dto);
Run Code Online (Sandbox Code Playgroud)
对于类似的东西
var response = Request.CreateResponse(HttpStatusCode.Created);
Run Code Online (Sandbox Code Playgroud)
这样您仍然会得到 200 - OK 响应,但没有响应正文。这当然违反了HTTP/1.1 标准对 PUT 动词的建议,但它仍然有效。
我什至可以为了咯咯笑而这样做
throw new HttpResponseException(HttpStatusCode.Created);
Run Code Online (Sandbox Code Playgroud)
您仍然会得到 200 - OK 响应。有点邪恶,但有可能。
我建议尝试从设置了x-dnb-user
和x-dnb-pwd
标头字段的另一个资源中获取数据,然后检查是否返回响应正文。也许 D&B 在实现这些标头字段时受到基本身份验证的启发,因此要求它们出现在每个请求中?
值得一试。
让我知道效果如何。
归档时间: |
|
查看次数: |
9357 次 |
最近记录: |