当你不应该使用UpdatePanel
而是使用WebMethod
和WebService
时,我不熟悉这种AJAX方法。我的主要问题是身份验证。
当输入页面或创建回发请求时,一切正常。身份验证正确传递,我可以访问Thread.CurrentPrincipal.Identity
并从那里获取我的用户身份对象。
但是当我尝试在我的页面上调用WebMethod
时,这会发生变化。调用正确传递给服务器,一切似乎工作正常,直到我尝试从线程获取用户身份。然后我只获得Anonymous
用户而不是真实用户。在webmethod上启用会话似乎没什么帮助。
任何可能导致此问题以及如何解决问题的想法?有人提到认证cookie需要与请求一起传递,但我该怎么做呢?
任何帮助将不胜感激。
编辑:
一些澄清和代码:
我的应用程序是用标准asp.net
编写的。在对遗留代码进行深入研究之后,我发现,所有其他页面都继承了所有认证都是在某些基类中完成的。每次加载页面时,都会从HttpContext.Current.Session("...")
获取用户主体。我认为这远非好的解决方案,但我现在需要坚持下去。问题是,WebMethod
没有触发整个页面生命周期,因为它是static
。我现在通过调用从会话中获取用户数据的方法来修复它。
我想了解如何正确创建这些内容以及基于会话的身份验证可能导致的问题。
PageMethods.SomeMethod(parameter, SuccessDelegate, FailureDelegate);
这就是我现在正在呼叫WebMethods
的方式。我认为它通过了所有必需的cookie,我是对的吗?
答案 0 :(得分:1)
这取决于你如何调用方法以及以何种方式调用?
Jquery例如使用其Post方法应该将所有cookie(包括您的FormsAuth / Session cookie)推送到应该仍然需要进行身份验证的请求。裸金属技术可能正在进行轻量级调用,而这些调用根本不会推动cookie ...监视这种情况的一种方法是使用Fiddler来观察请求和基于浏览器的开发插件,如Firebug并查看什么是适当的发生和修改您的JS代码。
就个人而言,如果您正在开始一个全新的项目并且没有迫切需要将您的服务暴露在您的Web应用程序之外,那么我建议您查看ASP.NET MVC,您可以在其中将Jquery /客户端升级到控制器并免费获取您的身份验证。我最近使用WCF JSON端点和一些不可避免的痛苦创建了一些simliar,然后我看到了MVC并且有点踢了我自己...
答案 1 :(得分:0)
如上面的评论中所述,问题在于处理用户的遗留代码。需要调用将特定用户数据分配给处理线程的特殊功能。这不是最好的解决方案,但这就是遗留代码的有时。你要做什么?