Visual Studio 2013 を使用して、新しい Web API 2 プロジェクトと新しい MVC プロジェクトを作成しました。API が作成された理由である API にアクセスする他のクライアントが存在します。最終的には、API のクライアントにより、ユーザーは Facebook などを使用してログイン アカウントを作成できるようになります。
Bad Password などのログイン中に API から返されたエラーを読み取ろうとしている問題。「メディア タイプが 'text/html' のコンテンツから何かのタイプのオブジェクトを読み取るために MediaTypeFormatter を使用できません。」のようなエラーに関する多くの投稿を見てきました。しかし、この問題を解決できません。
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";
}
}
}
正確なエラーは、「メディア タイプ 'text/html' のコンテンツからタイプ 'TokenError' のオブジェクトを読み取るために使用できる MediaTypeFormatter がありません。」