c# - MVC 5 身份验证和 HttpClient 没有可用的 MediaTypeFormatter

标签 c# asp.net-mvc authentication asp.net-web-api asp.net-mvc-5

我有一个 MVC 5 Web Api 和一个连接到它的桌面应用程序。

我有一个 Controller 并从应用程序连接到它没有任何问题,但是当我将 [Authorize] 属性放入 Controller 时,桌面应用程序中的 httpclient停止工作并说没有可用的 MediaTypeFormatter。

我认为 HttpClient 工作正常,我尝试使用请求 header 定义身份验证: httpClient.DefaultRequestHeaders.Authorization 并使用这种方式 httpclient = new HttpClient(new HttpClientHandler { Credentials = new NetworkCredential("UserName", "password") });

在使用 MVC 4 的传递中,它与身份验证一起使用。

在这种情况下,使用 MVC 5,它在使用 Anonymous 时完美运行,但是当我进行身份验证时,我在 httpresponse.Content.ReadAsAsync

中得到了这个异常
No MediaTypeFormatter is available to read an object of type 'Dictionary`2' from content with media type 'text/html'.

我应该在哪里看到?

更新

我将 httpResponse 读取为一个字符串,以查看 httpclient 正在获取什么,并在该字符串中读取登录页面的 HTML。显然身份验证失败,MVC + API 重定向到登录页面。 我现在应该怎么做? 为什么身份验证不像以前的 MVC 4 Web API 那样工作?是因为新的OWIN认证?

最佳答案

这些问题是因为身份验证不起作用。 MVC5 使用 Web Forms 身份验证,所以我不得不创建一种新的方法来对 HttpClient 进行身份验证。

  • 获取/Account/Login 页面并读取 _RequestVerificationToken
  • 将用户名、密码和_RequestVerificationToken 发布到/Account/Login

错误是因为当身份验证失败时,MVC5 将 HttpClient 重定向到登录页面。所以我得到的不是 JSON,而是 HTML。登录页面的 HTML。

关于c# - MVC 5 身份验证和 HttpClient 没有可用的 MediaTypeFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690765/

相关文章:

asp.net-mvc - 登录页面上的 Asp.Net MVC bundle

c# - MS 企业库配置应用程序 block 已从 4.1 堆栈中删除?

c# - TIBCO EMS 服务器是否管理重新连接?或者客户呢?

asp.net - 使用 EF Code First 添加 SqlMembership 表

c++ - 在SoupSession中更改libsoup身份验证

authentication - Janrain 和 Tomcat 身份验证

设置依赖属性后调用的 C# 函数

c# - 具有不同配置的多个 SignalR 集线器

asp.net-mvc - 如何从 ASP.NET MVC 应用程序返回 404 响应?

asp.net - VB.NET 对 ASP.NET 5 (MVC6) 的支持