使用自定义MembershipProvider与Web API& MVC

时间:2012-08-20 15:17:46

标签: forms-authentication asp.net-mvc-4 asp.net-web-api

我有两个控制器;

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

帐户控制器用于所有意图和目的是一个非常标准的帐户代码实现,唯一的主要区别是它使用自定义MembershipProvider。在帐户控制器上,我还有另外一个操作:

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

如果我试图进入:

http://localhost/Account/Bleh

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

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

在登录之前转到此会返回401 - 未经授权 - 这也是预期的,但在登录后,它仍会返回401.我无法理解为什么这是案件。

我错过了任何配置元素吗?路由? N.E.其他?

我的印象是Web Api会以与MVC相同的方式获取Forms身份验证,并且我知道身份验证正在作为MVC工作 工作。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我已从头开始重建应用程序,表单代码现在按预期工作。我不能为我的生活看到我的原始代码和新代码之间的任何区别。我怀疑某个地方的配置文件中可能存在某些内容,但经过相当长的一段时间后,我才能找到它。

答案 2 :(得分:0)

您可以覆盖OnRedirectToLogin Identity事件并根据它是API调用(基于&#39; / api /&#39;在url中)相应地返回响应