使用 Visual Studio 2013,我创建了一个新的 Web API 2 项目和一个新的 MVC 项目。将有其他客户端访问 API,这就是创建它的原因。最终,API 的客户端将允许用户使用 Facebook 和其他方式创建登录帐户。
我在尝试读取登录期间从 API 返回的错误时遇到的问题,例如密码错误。我看过很多很多关于类似错误的帖子,例如“没有 MediaTypeFormatter 可用于从媒体类型为‘text/html’的内容中读取类型对象。” 但无法解决此问题。
API 只需要返回 json 所以在我的 WebApiConfig.cs 文件中是
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
这是我在提琴手的帖子
这是响应:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
Yoda test = new Yoda() { email = model.Email, password = model.Password };
HttpClient client = CreateClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//client.DefaultRequestHeaders.TryAddWithoutValidation("content-type", "application/x-www-form-urlencoded");
client.DefaultRequestHeaders.TryAddWithoutValidation("content-type", "application/json");
HttpResponseMessage result = await client.PostAsJsonAsync(_apiHostURL, test);
result.EnsureSuccessStatusCode();
if (result.IsSuccessStatusCode)
{
var token = result.Content.ReadAsAsync<TokenError>(new[] { new JsonMediaTypeFormatter() }).Result;
}
public class TokenError
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
[JsonProperty("error")]
public string Error { get; set; }
}
public class Yoda
{
public string email { get; set; }
public string password { get; set; }
public string grant_type
{
get
{
return "password";
}
}
}
确切的错误是“没有 MediaTypeFormatter 可用于从媒体类型为‘text/html’的内容中读取‘TokenError’类型的对象。”