将自定义成员资格提供程序与 Web API 和 MVC 结合使用



我有两个控制器;

  • 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。我不明白为什么会这样。

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

我的印象是WebApi会以与MVC相同的方式使用Forms Authentication,我知道身份验证的工作方式与MVC的工作方式相同。

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

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

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

我已经从头开始重新构建了应用程序,表单代码现在可以按预期工作了。我一辈子都看不出我的原始代码和新代码之间有什么区别。我怀疑某个配置文件中可能有什么东西,但经过相当长的一段时间后,我就找不到了

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

最新更新