【问题标题】:jQuery webAPI call WebSecurity.IsAuthenticated is always falsejQuery webAPI 调用 WebSecurity.IsAuthenticated 始终为 false
【发布时间】:2013-10-21 13:45:34
【问题描述】:

我在我的 Web 应用程序中使用 WebAPI 服务。在此服务中用于所有帐户功能(/api/account/login、/api/account/logout、...)。在同一个 webroot 中,我有一个网站,它使用这个 webAPI 服务与后端系统进行通信。所以从我的 C# 代码中,我在我的 WebAPI 中调用 IsLoggedIn 函数,它在我登录时返回 true。这很好用。

[HttpGet]
public bool IsLoggedIn()
{
    return (WebSecurity.IsAuthenticated);
}

在我的区域注册中,我添加了以下代码:

context.Routes.MapHttpRoute("Account", "api/account/{action}/{id}", new { Controller = "Account", id = RouteParameter.Optional });

以及以下 GlobalConfiguration:

GlobalConfiguration.Configuration.Filters.Add(new ExceptionHandlingAttribute());
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

自定义的 ExceptionHandlingAttribute 检查抛出的异常是否属于特定类型,并返回自定义的 ReasonPhrase,所以没什么特别的。

当我登录并从 javascript (jQuery) 或 Fiddler 中调用函数时,IsLoggedIn 函数返回 false。我应该在我的 jQuery 调用中添加什么以确保在 WebAPI 中仍然可以找到正确的用户?这发生在 POST 和 GET 调用中。

请帮忙:)

【问题讨论】:

    标签: c# jquery asp.net-web-api


    【解决方案1】:

    因为 REST 是无状态的,所以它总是错误的,每个请求对以前的请求一无所知。

    您可以通过执行以下操作来启用会话状态 http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/

    更好的方法是让您的登录调用返回一个令牌,然后在后续调用中传递该令牌以识别用户。这是一个例子: How to use OAuth 2 - OAuth 2 C# example

    【讨论】:

    • 这还是很奇怪.. 服务器端代码通过 HttpClient.GetAsync() 连接到相同的服务。那么这也应该是无国籍的吧?但是当我使用这个功能时,我在 WebSecurity.IsAuthenticated 上得到了肯定的响应。当我使用 jQuery 做同样的事情时,我得到了否定的回应。
    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多