这是关于 ASP.NET -启用会话的论坛帖子,它显示了如何使用 PostAuthorizeRequest 方法为 WebApi 调用启用会话状态。我在 Global.asax 文件的修改下包含了代码片段,供您参考。
private const string _WebApiPrefix = "api";
private static string _WebApiExecutionPath = String.Format("~/{0}", _WebApiPrefix);
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: String.Format("{0}/{{controller}}/{{id}}", _WebApiPrefix),
defaults: new { id = RouteParameter.Optional }
);
}
protected void Application_PostAuthorizeRequest()
{
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
}
private static bool IsWebApiRequest()
{
return HttpContext.Current.Request
.AppRelativeCurrentExecutionFilePath.StartsWith(_WebApiExecutionPath);
}
看起来这应该可以解决您的问题。