无法调用任何身份验证 webapi 的方法,甚至无法登录或注册



我已经创建了具有身份验证的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();
        }
    }

我想致电注册方法而不涉及现有用户(用户名和密码(

如果有人可以帮助我,我将非常感激。
〜谢谢〜

设置匿名身份验证从项目属性启用解决了我的问题。谢谢

最新更新