首页 > 解决方案 > c#方法中的重定向不起作用

问题描述

在此处输入图像描述我正在尝试在我的 Web 表单页面中实现 Google 登录,因为我们使用 G Suite 进行业务。基本上我使用 javascript 来获取令牌,然后使用 ajax 发布到 google api 然后我正在查看 HD 声明以确保它们是我们域的一部分,然后发布到电子邮件后面的代码并进行查找以获取用户 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 但停留在登录页面上,所以我处于加载登录的无限循环中一遍又一遍的页面。

标签: javascriptc#

解决方案


是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();

推荐阅读