2011-05-24 177 views
0

我只是将一个登录提供程序集成到我的应用程序中,该应用程序在重定向回请求的页面时正在发送查询字符串参数,导致页面无法加载。它被设置的方式是:使用查询字符串

  • 我在本地主机/ AppName的/控制器,其索引方法需要[授权]控制器
  • 表单认证重定向到SSO
  • SSO重定向到localhost/AppName的/ Controller /?ticket = stringvalue
  • 页面无法加载(浏览器有“无法显示网页”消息);删除?门票业务使页面加载。

我的索引方法是这样的:

public ActionResult Index(string ticket) 

而且我认为他会接受查询字符串参数。我正在使用默认的路由配置,即:

routes.MapRoute(
    // Route name 
    "Default", 
    // URL with parameters 
    "{controller}/{action}/{id}", 
    // Parameter defaults 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

如果使用完整的网址 - 即/ Home/Index?ticket ='ticket',它可以工作吗? – 2011-05-24 12:54:53

+0

当您删除'票据'业务时,是否仍然执行'索引'动作? – 2011-05-24 12:59:39

回答

1

这显然有些棘手 - 因为没有理由不这么做。

我敢打赌,如果你脱掉[Authorize]属性,你会发现它可以与Url中的?ticket=[value]位一起使用。

如果是这样的话,我估计窗体身份验证被卡在重定向循环(和浏览器,过了一会就干脆拒绝继续) - 我认为这不是治疗目前UserIsAuthenticated=true等重定向到您的SSO 。 SSO表示用户已登录,因此重定向了票据参数 - 令人厌恶。

您可以使用VS调试器简单地调试它,并简化您的操作方法。同样在Http级别进行调试通常更容易:下载Fiddler,然后在启动并运行后使用特殊名称http://ipv4.fiddler而不是http://localhost击中您的站点。

您的代码中必须包含更多您未包括的内容 - 大概是某处您有代码拦截ticket并将用户设置为在MVC操作方法启动之前进行身份验证?如果是这样 - 我认为这是失败的。

+0

由于我不能提交我自己的答案,我只是把它扔在这里:我很笨。如果服务器名称设置为'localhost'而不是'http:// localhost'。 – raoul1034 2011-05-24 13:34:34

+0

啊 - 现在我会*想*说我以前从未这样做过......但我不能;) – 2011-05-24 13:46:12