我已经创建了具有身份验证的Web API,但是当我尝试使用Console应用程序注册时,我会得到以下错误:
wespons = {statuscode:401,推理形式:'未经授权',版本: 1.1,内容:system.net.http.StreamContent,标题:{X-Sourcefiles: =? 缓存控制:专用服务器:Microsoft-iis/8.0 www-partenticate: 承载者,谈判,ntlm x-power-by:asp.net
如何使用控制台客户端注册API?
我可以从postman
调用注册方法,然后登记到应用程序
这是我的控制台代码
static async Task<string> PostRequest4(string token, string apiBaseUri, string requestPath, RegisterBindingModel t)
{
HttpClientHandler hndlr = new HttpClientHandler();
hndlr.UseDefaultCredentials = true;
using (var client = new HttpClient())
{
//setup client
client.BaseAddress = new Uri("http://localhost:38811/");
client.DefaultRequestHeaders.Accept.Clear();
//client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//make request
HttpResponseMessage response = await client.PostAsJsonAsync(requestPath, t);
//make request
Stream stream = await response.Content.ReadAsStreamAsync();
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(ResponseMessage));
ResponseMessage objResponse = (ResponseMessage)dataContractJsonSerializer.ReadObject(stream);
string res = "";
if (objResponse == null)
{
res = "error occurred!";
}
else
{
if (objResponse.ErrorMessage != null)
{
res = "error occurred!";
}
else if (objResponse.IsSuccess)
{
res = "Item ID " + objResponse.ID.ToString() + " have been added Successfully!";
}
}
return res;
}
}
通过之前,如果我添加以下行,我可以成功注册到应用程序
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
在这里,我使用现有用户"用户名和密码"
获得了以下方法的象征private static async Task<string> GetAPIToken(string userName, string password, string apiBaseUri)
{
using (var client = new HttpClient())
{
//setup client
client.BaseAddress = new Uri(apiBaseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//setup login data
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", userName),
new KeyValuePair<string, string>("password", password),
});
//send request
HttpResponseMessage responseMessage = await client.PostAsync(Token , formContent);
//get access token from response body
var responseJson = await responseMessage.Content.ReadAsStringAsync();
var jObject = JObject.Parse(responseJson);
return jObject.GetValue("access_token").ToString();
}
}
我想致电注册方法而不涉及现有用户(用户名和密码(
如果有人可以帮助我,我将非常感激。
〜谢谢〜
设置匿名身份验证从项目属性启用解决了我的问题。谢谢