|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?被这个成绩困扰多年,明天终究找到了更复杂的办理办法,分享一下。
成绩场景
假定我们在i.cnblogs.com站点的web.config中对FormsAuthentication举行了以下的设置:- <authenticationmode="Forms"><formsname=".cnblogs"loginUrl="https://passport.cnblogs.com/login.aspx"protection="All"path="/"/></authentication>
复制代码 当我们会见一个必要登录后才干会见的URL时,好比:http://i.cnblogs.com/post/list,哀求会被重定向至以下的地点:- https://passport.cnblogs.com/login.aspx?ReturnUrl=%2fpost%2flist
复制代码 瞧!经由过程ReturnUrl查询参数传送给登录页面的是绝对路径——这就是成绩地点。因为会见的页面与登录页面不在统一个二级域名下,利用这个绝对路径是Return不返来的。
成绩的本源
用ILSPY看一下System.Web.Security.FormsAuthentication的代码,立马就可以晓得成绩缘故原由地点:
- internalstaticstringGetLoginPage(stringextraQueryString,boolreuseReturnUrl){//...if(text2==null){text2=HttpUtility.UrlEncode(current.Request.RawUrl,current.Request.ContentEncoding);}text=text+FormsAuthentication.ReturnUrlVar+"="+text2;if(!string.IsNullOrEmpty(extraQueryString)){text=text+"&"+extraQueryString;}returntext;}
复制代码
由码可见,微软基本就忽视了登录页面不在统一个二级域名的基础使用场景,并且一向忽视到如今。
之前的办理办法
在以后站点增加一其中转页面,由直达页面重定向至登录页面。
因而,web.config的设置酿成了以下的模样,先重定向至以后站点的登录直达页面。- <authenticationmode="Forms"><formsname=".cnblogs"loginUrl="~/account/login"protection="All"path="/"/></authentication>
复制代码 然后,在直达页面利用相对路径作为ReturnUrl的值,再重定向至真实的登录页面。
直达页面的示例代码以下:
- publicclassAccountController:Controller{publicActionResultLogin(stringReturnUrl){returnRedirect("https://passport.cnblogs.com/login.aspx?ReturnUrl="+HttpUtility.UrlEncode("http://"+Request.Url.Host)+ReturnUrl);}}
复制代码
固然办理了成绩,可是关于如许的办理办法,我以为有些拢芫醯糜懈玫慕饩龇椒ǎ墒且恢泵徽业健
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然…… |
|