【问题标题】:Url.Action returns nullUrl.Action 返回 null
【发布时间】:2020-03-10 20:51:31
【问题描述】:

我正在尝试使用 asp.net core 3 构建电子邮件确认链接。生成令牌后,使用此代码生成确认电子邮件链接始终返回 null。

var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
            var confirmationLink = Url.Action(
                "ConfirmEmail",
                "Users",
                new { userId = user.Id, token }, protocol: Request.Scheme
                );

这是一个没有 mvc 的 .net core 3 web api 项目。在启动时配置是使用:app.UseRouting()。

我在上面做错了什么以及为什么它总是返回 null。为了返回正确的期望值,我需要满足什么方法?

【问题讨论】:

  • 我可能是错的 - 但Url.Action 不会同时验证 Controller 和 Action 方法,并删除它无法验证存在的任何部分吗?
  • @SamAxe 我相信是这样,因为它必须查看路由以生成正确的 URL,因为它不一定总是 /Controller/Action?id=...。我不确定 userId 和 token plus 路由是否也会起作用。我会说添加控制器/动作的方法签名和类定义。还要确保在类或操作中包含任何属性,因为两者都可以根据它们是什么来产生影响。
  • @SamAxe 是的,你是对的,你的解释,结合飞寒的回答,我能够做更多的研究并找到一个我能够修改并使其适用于我的案例的例子。是的,我错过了控制器上提到的所需的“ConfirmEmail”方法

标签: c# asp.net-core razor


【解决方案1】:

尝试使用 asp.net core 3 构建电子邮件确认链接。生成令牌后,使用此代码生成确认电子邮件链接始终返回 null。

this documentation,您可以找到:

Generating a URI for an invalid route (a controller/action or page that doesn't 

exist) will produce an empty string under endpoint routing instead of producing 

an invalid URI.

【讨论】:

  • 这为我指明了正确的方向。我可以说我终于解决了这个问题
【解决方案2】:

根据反馈和给出的答案来回答我的问题,能够更多地挖掘我所缺少的东西。下面的实现解决了我的问题,我能够生成一个电子邮件确认链接。

下面是实现:

var confirmationLink = Url.Action(nameof(ConfirmEmail), "Users", new { token, email = user.Email }, Request.Scheme);

通过 nameof() 运算符以及设置用户电子邮件的“ConfirmEmail”方法。不确定整个实现在后台发生了什么,但会留到另一天。

确认EMail方式:

[HttpGet]
public async Task<IActionResult> ConfirmEmail(string token, string email)
{
     var user = await _userManager.FindByEmailAsync(email);
     // More logic....

     var result = await _userManager.ConfirmEmailAsync(user, token);
     // More logic.... return whether success or failure
}

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 2017-12-02
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多