我在Visual Studio 2010中为我的项目定义了两个发布配置文件:一个使用ftp进行生产,另一个使用我的本地文件系统进行调试和日常开发.
我有适用于调试和发布构建配置的web.config转换.我的项目是一个Facebook应用程序,我根据部署设置应用程序ID和密码.
我希望能够强制执行一条规则,以便无法将生产ftp发布配置文件与调试版本配置一起使用.这种组合将是灾难性的,完全打破了我的生产环境.
我该如何执行此规则?
我对替代部署方法持开放态度,但我很满意现在的简单性,除了在推送到生产时可能忽略构建配置.
在我的ASP.NET MVC 3 Web应用程序中,我将覆盖自定义视图引擎中的视图名称,以呈现针对非平板电脑移动设备优化的不同视图.
我想要执行此视图覆盖的所有内容都是Request.Browser.IsMobileDevice设备的本机显示宽度的准确值.
对于这个简单的用例,51degrees.mobi感觉非常沉重和复杂.也许这只是我试图浏览51degrees网站上的所有示例和文档以获得简单实现的简单问题的答案.
缺席51degrees,我确实得到了Request.Browser.IsMobileDevice和Request.Browser.ScreenPixelsWidth.我注意到对于桌面浏览器,宽度总是640,而Request.Browser.Capabilities["51Degrees.mobi"]包含值"未知" ScreenPixelsWidth.鉴于实现的服务器端性质,我想未知值更准确.
我的主要问题是:对于我的简单要求,我真的需要51度吗?
如果我不使用51degrees,是否有一些特定的浏览器示例,我将无法正确检测IsMobileDevice和屏幕宽度?例如,内置的.NET Request.Browser.IsMobile和ScreenPixelsWidth值是否会在新iPad出现时或最新的Android浏览器版本时不准确或不存在?我的网站获得了大约65%的移动用户,其中许多是使用UP.Browser等浏览器的蹩脚功能手机,所以获得正确的移动设备有点重要.
如果我使用51degrees,我是否需要始终深入查看Request.Browser.Capabilities ["51Degrees.mobi"]?或者51degrees是否覆盖/更新Request.Browser.IsMobileDevice的值以与浏览器的评估同步?显然它不会覆盖Request.Browser.ScreenPixelsWidth.
我愿意回答"你做错了,这是一种更好的方式",只要他们不建议使用MVC 4或涉及WURFL这样的付费解决方案.
我正在使用3.0版本的Facebook Developer Toolkit来构建一个MVC iframe Facebook应用程序,并且在授予后立即获得无限会话密钥时遇到一些麻烦.
当用户首次点击我的应用程序设置View以设置他们的首选项时,他们只有来自Facebook的通常过期的会话密钥.没问题.
根据他们选择的首选项,我使用Facebook javascript客户端库FB.Connect.showPermissionDialog方法提示他们获取offline_access扩展权限.再次没问题,他们授予许可.
此时,发出新的非过期(无限)会话密钥.我需要将其保存到我的数据库中以备将来使用.问题是,我无法弄清楚如何在需要时立即获取它.包含会话信息的Facebook Cookie在更新页面刷新之前不会更新.
Facebook错误跟踪器中有一个与此相关的错误ID 6421的漏洞,但我正在寻找使用Facebook Developer Toolkit 3.0版本的服务器端解决方案.我想告诉FDT api去Facebook并获得新会议.
我知道新会议是在Facebook方面建立的.http://www.facebook.com/extern/login_status.php上有一个告密的GET,在用户授予offline_access权限后立即出现在Firebug Net面板中,并且响应时包含一些包含新的非过期的javascript会话密钥.如果我继续使用旧的到期会话密钥,我会从Facebook收到无效的会话错误.
在我的控制器中,我有以下代码:
[AcceptVerbs(HttpVerbs.Post)]
[FacebookAuthorization(IsFbml = false)]
public ActionResult Index(FormCollection collection)
{
var api = this.GetApi();
var userid = api.Session.UserId;
var key = api.Session.SessionKey;
}
Run Code Online (Sandbox Code Playgroud)
这是获得旧的SessionKey,而不是新的非过期的.
如果我在GET上使用ExtendedPermissions ="offline_access"装饰我的ActionResult,强制用户在看到页面之前授予offline_access,但我不喜欢这种用户体验.我更喜欢仅在需要时提示使用javascript,并且当我使用ExtendedPermissions ="offline_access"时,javascript权限灯箱比完整页面宽度权限提示要好得多.
我也尝试拦截对我的xd_receiver的调用(我已经创建了一个View,所以我可以在其控制器中点击调试器断点并检查来自Facebook的传入请求).它在授予扩展权限期间受到攻击,但它再次引用旧的过期会话信息.
所以回顾一下,我正在寻找一种方法,使用Facebook Developer Toolkit强制从Facebook刷新会话并获得新的无限会话密钥(和秘密).