所以我试图回收一些代码背后的代码'我的MVC应用程序和他们使用的Authenticate类的图案化.NET应用程序。 SignInController的Index方法基于他们给我的代码是如何工作的,是调用else if
中的Authenticate类方法获取一个令牌并重定向回Index方法,此时该方法app现在有一个令牌,它进入第一个if
条件,前面的Authenticate中的另一个方法验证令牌。由于用户不会以令牌开头,因此else if
将始终潜入第一位。
为了安抚"并非所有代码路径都返回一个值"错误我必须在else if
子句和else
子句的末尾添加一个return语句。但是,如果我return null
索引没有被断点确认重定向到。但是,如果我执行return RedirectToAction("Index", "SignIn");
,我会收到有关&#34的错误;在发送HTTP标头后无法重定向"我怀疑是因为来自Authenticate类的Redirect
调用还没有完成。但是,由于返回值无法将Web应用程序重定向回索引,我对如何纠正这种情况感到不满......
原创"看后面"我尝试从同事的应用程序中回收的.NET代码:
if (string.IsNullOrEmpty(HttpContext.Current.User.Identity.Name) && HttpContext.Current.Request.QueryString["Token"] != null)
{
// we’ve got a token, they must have logged in .. double-check the token
string ssoToken = HttpContext.Current.Request.QueryString["Token"].ToString();
string userRoles = string.Empty;
if (Authenticate.ValidateSSOToken(ssoToken, out userRoles))
{
string userName = HttpContext.Current.User.Identity.Name;
((BaseApplicationPage)(this.Page)).CurrentSecurity.SetUser(userName, "", userRoles);
RedirectOnSuccess();
}
else
{
RedirectToForbiddenPage();
}
}
else if(string.IsNullOrEmpty(HttpContext.Current.User.Identity.Name))
{
// no user data..go ask them to get SSOToken from service
Authenticate.isUserAuthenticated();
}
我尝试将其重新用于MVC样式的.NET应用程序:
public ActionResult Index()
{
if (string.IsNullOrEmpty(System.Web.HttpContext.Current.User.Identity.Name) && System.Web.HttpContext.Current.Request.QueryString["Token"] != null)
{
// we’ve got a token, they must have logged in ... double-check the token
string ssoToken = System.Web.HttpContext.Current.Request.QueryString["Token"].ToString();
string userRoles = string.Empty;
if (Authenticate.ValidateSSOToken(ssoToken, out userRoles))
{
string userName = System.Web.HttpContext.Current.User.Identity.Name;
//((BaseApplicationPage)(this.Page)).CurrentSecurity.SetUser(userName, "", userRoles);
//RedirectOnSuccess();
// TODO: Not sure what the MVC equivalent would be for commented out code above
return RedirectToAction("Index", "Checklist");
}
else
{
//RedirectToForbiddenPage();
HttpStatusCodeResult(HttpStatusCode.Forbidden);
}
}
else if (string.IsNullOrEmpty(System.Web.HttpContext.Current.User.Identity.Name))
{
// no user data...go ask them to get SSOToken from service
Authenticate.isUserAuthenticated();
return null; // Screwed if I don't return anything because of build error, screwed if I do return something because it messes with the redirect
}
else
{
return null;
}
}
验证获取令牌的isUserAuthenticated
末尾的类代码段:
//string RedirectURL = GetBaseVirtualDirectory() + "/SignIn/Index";
string RedirectURL = "https://localhost:XXXX1/SignIn/Index";
HttpContext.Current.Response.Redirect(authServiceURL + "/Windows/Auth?RedirectURL=" + RedirectURL, true);
答案 0 :(得分:0)
问题是您的>>> [list(set().union(*[v.tolist()
for v in daily_observations.loc[daily_observations.index <= idx].values]))
for idx in daily_observations.index]
[[1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
方法已调用Authenticate.ValidateSSOToken
,在错误消息确认时,会向响应添加重定向标头(HttpContext.Current.Response.Redirect
)。
您可以在致电Location
之前清除回复。
但是一个名为RedirectToAction
的方法可能不应该自己进行任何重定向。它应该返回一个状态,你应该根据该状态在它之外进行任何重定向。
在Action中进行所有验证可能不是一个好习惯。