【发布时间】:2014-01-08 13:21:49
【问题描述】:
我有一个 MVC 5 Web Api 和一个连接到它的桌面应用程序。
我有一个控制器并从应用程序连接到它没有任何问题,但是当我将 [Authorize] 属性放入控制器时,桌面应用程序中的 httpclient 停止工作并说没有可用的 MediaTypeFormatter。
我认为 HttpClient 工作正常,我尝试使用请求标头定义身份验证:
httpClient.DefaultRequestHeaders.Authorization
并使用这种方式httpclient = new HttpClient(new HttpClientHandler { Credentials = new NetworkCredential("UserName", "password") });。
在使用 MVC 4 的 pass 中,它适用于身份验证。
在这种情况下,使用 MVC 5,它在使用匿名时可以完美运行,但是当我进行身份验证时,我在 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。 Aparently 身份验证失败,MVC + API 重定向到登录页面。 我现在该怎么办? 为什么身份验证不像以前的 MVC 4 Web API 那样工作?是因为新的OWIN认证吗?
【问题讨论】:
-
根据您在帖子中提到的详细信息,看起来服务器正在响应错误,可能与 html 文档中的详细信息有关,这就是响应内容类型为
text/html的原因。默认情况下,Web API 附带json、xml和formurlencoded的格式化程序,ReadAsAync 也只能理解这些格式...试试这个..dohttpresponse.Content.ReadAsStringAsync().Result以获取 html 并检查您看到的错误.. -
@KiranChalla 你太棒了!我根据您的建议更新我的答案
-
您是否在进行身份验证时存储cookie,并在需要进行身份验证时将其传递给服务器?
标签: c# asp.net-mvc authentication asp.net-web-api asp.net-mvc-5