当前位置: 首页 > 知识库问答 >
问题:

ASP中的路由问题。NET CORE 3.0

颜修为
2023-03-14

使用。Net Core 3.0<这基本上是作为发送用户帐户确认电子邮件的帐户验证模块<下面是我编写的创建URL并发送到用户电子邮件的代码<要在电子邮件中发送的确认链接使用LinkGenerator库生成,然后与localhost连接以创建完整的URL<电子邮件中发送的URL创建如下,SendAccountConfirmationMail方法用于向用户发送电子邮件。

[HttpPost("registerUser")]
    public IActionResult NewUser(UserModel userModel)
    {

        EmailSender emailSender = new EmailSender();
        string response = userDAL.NewUser(userModel).ToString();
        if (response != "EmailExists" && response != "UsernameExists")
        {
            EncryptDecrypt _encryptDecrypt = new EncryptDecrypt();
            string code = emailSender.GenerateEmailCode();
             string LinkEmail= _encryptDecrypt.Encrypt(response, "1359Mali_");
            string url = _linkGenerator.GetPathByAction("ConfirmEmail", "User", new { email = LinkEmail, code = code });
            url = "https://localhost:44312" + url;

            bool EmailSent = emailSender.SendAccountConfirmationEmail(response,url);
            if (EmailSent == true)
            {
                userDAL.InsertUserEmailConfirmationCode(response, code);
            }
        }

        return Ok(response);
    }

我成功地收到了带有重定向链接的电子邮件,但当我单击该链接时,它会在浏览器中打开,并显示无法使用Http Error405的页面,并且未命中ConfirmEmail方法上的调试器。确认邮件方法如下:

 [HttpPost("ConfirmEmail/{email}/{code}")]
    public IActionResult ConfirmEmail( string email, string code)
    {
        EncryptDecrypt _encryptDecrypt = new EncryptDecrypt();
        string emailDecrypted = _encryptDecrypt.Decrypt(email, "1359Mali_");
        string codeDecrypted = _encryptDecrypt.Decrypt(code, "1359Mali_");
        string response = Convert.ToString(userDAL.VerifyCode(emailDecrypted, codeDecrypted));

        if (response.ToUpper() == "EMAILNOTCONFIRMED")
        {
            string message = "EMAILNOTCONFIRMED";
            return StatusCode(200, message);
        }
        else if (response.ToUpper() == "EMAILCONFIRMED")
        {
            //Call login medthod
            return Ok();
        }
        else
        {
            string message = "An Error Occured";
            return StatusCode(200, message);
        }

    }  

启动。反恐精英

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();
        app.UseHttpsRedirection();



        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

    }

共有2个答案

左仰岳
2023-03-14

在电子邮件链接中不可能使用HttpPost。请通过将其标记为HttpGet来更新您的操作以接收GET请求。

如果您希望您的操作也接收HttpPost请求,那么您可以添加HttpGet和HttpPost,这样操作将同时接收GET和POST请求。

翟永春
2023-03-14

当浏览器在页面上打开时。这是Get请求。所以你应该改变:

[HttpPost("ConfirmEmail/{email}/{code}")]
public IActionResult ConfirmEmail( string email, string code)

到:

[HttpGet("ConfirmEmail/{email}/{code}")]
public IActionResult ConfirmEmail( string email, string code)
 类似资料:
  • 我正在使用camel和camel-restlet组件来路由RESTFul web服务。我的路由配置如下所示: 我有一些输入路由配置,比如:

  • 我正在构建angular2应用程序,目前我有一个家庭组件与菜单栏和路由器出口的主要内容。我添加了登录机制,所以如果用户没有经过身份验证,那么登录页面将显示在整个屏幕上,登录后用户将被路由到上面结构的主/主组件。 当我运行登录页面加载的应用程序时,成功验证后,它会将我路由到主页,但在加载菜单的主页(如Dashboard1、Dashboard2、Report1等)中,链接无法正常工作。当我点击任何菜单

  • 我有一个奇怪的问题与ASP。Net MVC 4 formcollection用于提交的表单。以下是实际情况: ASP. Net MVC 4项目 我有一个具有多个输入的视图表单。 我在表单上有两个提交按钮,每个按钮都有不同的名称,并且每个按钮都映射到视图控制器中的不同操作(使用HttpParam动作属性)。 我在表单外面有两个Actionlink按钮,带有指向表单内两个提交按钮中的每一个的点击事件。

  • 多页面的配置如下: 在充值中心配置的路由守卫是想在访问 http://localhost:9000/recharge-center/xxx不存在的页面时重定向到充值中心页面,即 http://localhost:9000/recharge-center,但实际上却会重定向到主页,在控制台也可以看到没有进入充值中心的路由守卫钩子函数,而是进入了主页的钩子函数。 主页的路由: 充值中心的路由: 望解答

  • 当路由是user/222/detail时 为什么匹配的params里orderId是222/detail,怎么样只匹配中间那段? user/222后可以有子路径也可以没有

  • 内置了一个组件,想每次打开都用一个新路由打开,但是显示不出来