C#调用aspnet webapi令牌端点在我的本地主机上运行良好,但在服务器上出现错误 公共静态异步任务GetTokenInforaccess(此用户) { var scheme=HttpContext.Current.Request.IsSecureConnection?“https://”:http://; 字符串baseAddress=$“{scheme}{HttpContext.Current.Request.Url.Authority}”; 使用(var client=new HttpClient()) { var accept=“application/json”; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Add(“接受”,“*/*”); client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”); client.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”); 字符串grant_type=“password”; 字符串正文=$“授权类型={授权类型}&用户名={user.PhoneNumber}&密码={user.password}&授权访问=真”; HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Post,$“{baseAddress}/token”) { 内容=新的StringContent(主体, Encoding.UTF8, “应用程序/x-www-form-urlencoded”) }; var response=wait client.sendaync(请求); var token=response.Content.ReadAsAsync(new[]{new JsonMediaTypeFormatter()}); if(string.IsNullOrEmpty(token.Error)) { 返回新元组(true,token.AccessToken); } 其他的 { 返回新元组(false,token.Error); } } }

C#调用aspnet webapi令牌端点在我的本地主机上运行良好,但在服务器上出现错误 公共静态异步任务GetTokenInforaccess(此用户) { var scheme=HttpContext.Current.Request.IsSecureConnection?“https://”:http://; 字符串baseAddress=$“{scheme}{HttpContext.Current.Request.Url.Authority}”; 使用(var client=new HttpClient()) { var accept=“application/json”; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Add(“接受”,“*/*”); client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”); client.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”); 字符串grant_type=“password”; 字符串正文=$“授权类型={授权类型}&用户名={user.PhoneNumber}&密码={user.password}&授权访问=真”; HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Post,$“{baseAddress}/token”) { 内容=新的StringContent(主体, Encoding.UTF8, “应用程序/x-www-form-urlencoded”) }; var response=wait client.sendaync(请求); var token=response.Content.ReadAsAsync(new[]{new JsonMediaTypeFormatter()}); if(string.IsNullOrEmpty(token.Error)) { 返回新元组(true,token.AccessToken); } 其他的 { 返回新元组(false,token.Error); } } },c#,asp.net-web-api,openid,C#,Asp.net Web Api,Openid,您的问题应该在这里: public static async Task<Tuple<bool, string>> GetTokenForAccess(this User user) { var scheme = HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://"; string baseAddress = $"{scheme}{HttpContext

您的问题应该在这里:

public static async Task<Tuple<bool, string>> GetTokenForAccess(this User user)
{
        var scheme = HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://";
        string baseAddress = $"{scheme}{HttpContext.Current.Request.Url.Authority}";
        using (var client = new HttpClient())
        {
            var accept = "application/json";
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Add("Accept", "*/*");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

            string grant_type = "password";
            string body = $"grant_type={grant_type}&username={user.PhoneNumber}&password={user.Password}&grant_access=true";

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{baseAddress}/token")
            {
                Content = new StringContent(body,
                    Encoding.UTF8,
                    "application/x-www-form-urlencoded")
            };
            var response = await client.SendAsync(request);
            var token = response.Content.ReadAsAsync<Token>(new[] { new JsonMediaTypeFormatter() }).Result;


            if (string.IsNullOrEmpty(token.Error))
            {
                return new Tuple<bool, string>(true, token.AccessToken);
            }
            else
            {
                return new Tuple<bool, string>(false, token.Error);
            }
        }
    }

删除“application/json”,因为OAuthAuthorizationServerHandler的默认实现只接受表单编码(即application/x-www-form-urlencoded),而不接受json编码(application/json).

错误是什么?您能告诉我错误是什么吗?不支持的授权类型使用postman调用端点生成令牌,但使用HttpClient会给出错误“”不支持的授权类型“c#中的
grant_type
值是否与您在Postman中设置的值不同?accept标头要求服务器提供特定的响应格式,请求格式被定义为application/x-www-form-urlencodedw,我不知道的是,它在本地机器上工作得很好,但在给定错误的服务器上。您检查了CORS错误了吗?看看它是否有用。
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));