C#方法中的重定向不起作用

时间:2018-07-05 12:37:28

标签: javascript c#

enter image description here我正在尝试将Google登录实施到我的Web表单页面中,因为我们将G Suite用于业务。基本上,我正在使用javascript获取令牌,然后使用ajax将其发布到google api,然后我正在查看高清声明,以确保它们不属于我们的域,并在电子邮件后面的代码中发布并进行查找以获取用户ID,然后设置表单Cookie并尝试重定向到我们的默认页面。因此,我们有一个可以完成此操作的mvc应用程序,并且我将其路由到控制器后,它可以完美地运行。由于某种原因,似乎我没有从代码中得到任何东西。

这是我的JavaScript。

  <script>
        function onSignIn(googleUser) {
            debugger;
            const profile = googleUser.getBasicProfile();
            let boolRedirectUrl = false;
            const id_token = googleUser.getAuthResponse().id_token;
            const pathname = window.location.pathname;
            const url = window.location.href;
            let redirectPath = "";
            if (window.location.href.indexOf("ReturnUrl") > -1) {
                boolRedirectUrl = true;
                redirectPath = readQueryString("ReturnUrl");
            }
            const googleUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" + id_token;
            $.ajax({
                url: googleUrl,
                dataType: 'json',
                data: '{}',
                contentType: 'application/json',
                success: (data, status, xhr) => {
                    const domain = data.hd;
                    const email = data.email;
                    if (domain === "kimbelmechanical.com") {
                        $.ajax({
                            url: "Login.aspx/GoogleLogin",
                            type: "POST",
                            data: { 'email': email },
                            success: (data, status, xhr) => {
                                //window.location.href = "Default.aspx"
                            },
                            error: (xhr, status, error) => {
                                console.log("I stopeed on the call to controller " + status);
                            }
                        });

                    }
                },
                error: (xhr, status, error) => {
                    console.log(status);
                }
            });
        };

        function readQueryString(key) {
            key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&");
            var match = location.search.match(new RegExp("[?&]" + key + "=([^&]+)(&|$)"));
            return match && decodeURIComponent(match[1].replace(/\+/g, " "));
        }
    </script>

这是我后面的C#代码。

 [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void GoogleLogin(string email)
    {
        string userID = "";
        using (var context = new KPDataContext(KP.Common.KPConnectionString))
        {
            var user = context.Employees.Where(p => p.Email == email);

            foreach (var e in user)
            {
                userID = e.Username;
            }
        }




        if (userID != "")
        {
            FormsAuthentication.SetAuthCookie(userID, false);
            Response.Redirect("~/Default.aspx", true);
        }
    }

如果我从成功重定向到我的默认页面,它将加载它default.aspx,但是由于某种原因它确实登录了login.aspx?ReturnUrl =?default.aspx,但是停留在登录页面上,所以我陷入了无休止的循环中一遍又一遍地加载登录页面。

1 个答案:

答案 0 :(得分:0)

是MVC吗?如果是这样,则可以将RouteData与创建控制器的新实例一起使用。然后,该控制器可以使用新路径执行新的Web请求,如下所示:

 var routeData = new RouteData();
                    routeData.Values.Add("message", errorModel.message);
                    routeData.Values.Add("action", "Index");
                    routeData.Values.Add("controller", "ErrorPage");
                    IController ctrl = new ErrorController();
                    ctrl.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
  Response.End();