C# 使用Web Api 2身份验证,接收';没有可用的MediaTypeFormatter…';令牌模型对象出错
没有MediaTypeFormatter可用于从媒体类型为“text/html”的内容中读取类型为“TokenModel”的对象 我在登录时调用Web Api的C# 使用Web Api 2身份验证,接收';没有可用的MediaTypeFormatter…';令牌模型对象出错,c#,webforms,asp.net-web-api2,C#,Webforms,Asp.net Web Api2,没有MediaTypeFormatter可用于从媒体类型为“text/html”的内容中读取类型为“TokenModel”的对象 我在登录时调用Web Api的/Token端点时收到上述错误。我正在使用一个2012年的webforms项目作为我的客户,使用一个2013年的webapi 2项目作为我的api 我应该补充一点,只有当我从本地主机测试我的客户机,并且api被推送到我的开发服务器时,才会发生这种情况。当我在localhost上测试这两个项目时,调用工作正常 如果有人能解释一下可能发生的事
/Token
端点时收到上述错误。我正在使用一个2012年的webforms
项目作为我的客户,使用一个2013年的webapi 2
项目作为我的api
我应该补充一点,只有当我从本地主机测试我的客户机,并且api被推送到我的开发服务器时,才会发生这种情况。当我在localhost上测试这两个项目时,调用工作正常
如果有人能解释一下可能发生的事情,我将不胜感激。我将在一个测试场景中让世界各地的人使用这个服务,所以我需要能够在我的开发服务器上安装它。我很感激
Api调用:
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(TestServiceUrl);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var responseMessage = await httpClient.PostAsync("Token", new FormUrlEncodedContent(
new[]
{
new KeyValuePair<string,string>("grant_type","password"),
new KeyValuePair<string,string>("username",username),
new KeyValuePair<string,string>("password",password),
}
));
***vvv line throwing error vvv***
var tokenModel = await responseMessage.Content.ReadAsAsync<TokenModel>();
token = tokenModel.AccessToken;
}
更新
我试着加上
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”、“应用程序/json”)代码>
我在一个开发人员的博客上发现了这个问题,但我收到了相同的错误。您是否在响应中设置了正确的内容类型
标题?我让它自己隐式地处理这个问题,这在localhost中似乎是可以接受的,但在服务器上却不能。
using Newtonsoft.Json;
namespace Login.Class
{
public class TokenModel
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty(".expires")]
public string ExpiresAt { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty(".issued")]
public string IssuedAt { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("userName")]
public string Username { get; set; }
}
}