0

我有两个控制器;

  • AccountController : Controller //For accounts <-- MVC
  • ItemController : ApiController //For Items <-- WEB API

从所有意图和目的来看,accounts 控制器都是 Accounts 代码的一个非常标准的实现,唯一的主要区别是它使用了 Custom MembershipProvider。在帐户控制器上,我还有另一项操作:

[Authorize]
public ActionResult Bleh(){ return View(); }

如果我尝试到达:

http://localhost/Account/Bleh

将我(如预期)重定向到登录页面,登录后,我返回到 Bleh 页面。都好。问题出在 ItemController 上,我有一个 Action,上面也有 Authorize 属性:

[Authorize]
public HttpResponseMessage PostItem(Item item) { /**/ }

在登录之前转到此返回 401 - Unauthorized - 这再次符合预期,但在登录后,它仍然返回 401。我不明白为什么会这样。

我是否缺少任何配置元素?路由?NE 其他?

我的印象是 Web Api 会以与 MVC 相同的方式获取表单身份验证,并且我知道身份验证正在像 MVC 一样工作

4

3 回答 3

0

确保在托管 API 控制器的 web.config 中定义了身份验证方案:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2400" />
</authentication>

或者,如果您正在使用某种其他类型的自定义身份验证方案,以不同方式跟踪用户,则可能需要编写 DelegatingHandler。这是我为基本身份验证编写的示例:https ://stackoverflow.com/a/11536349/29407

于 2012-08-20T19:06:57.010 回答
0

我已经从头开始重建了应用程序,并且表单代码现在按预期工作。我一辈子都看不出我的原始代码和新代码之间有什么区别。我怀疑某处的配置文件中可能有一些东西,但经过相当长的一段时间后,它却让我无法理解。

于 2012-09-24T10:31:12.793 回答
0

您可以覆盖 OnRedirectToLogin Identity 事件并根据它是 API 调用这一事实相应地返回响应(基于 url 中的“/api/”)

于 2017-06-29T13:50:01.943 回答