c# - 带有协议(protocol)的 Url.Action 返回没有域的链接

标签 c# asp.net-core asp.net-core-mvc sendgrid

我正在使用 Url.Action 生成一个绝对 URL 以在电子邮件中发送。该链接在 Controller 内生成。

ConfirmLink = Url.Action(
    "ConfirmEmail",
    "Account",
    new { userId = user.Id, code },
    HttpContext.Request.Scheme
)

出于某种原因,在本地,我有这样的结果:

http://localhost:5102/account/confirm-email?userId=10&code=CfDJ8JH5BJKUsPZDnCLwFc3HSEHfe9Fk00NHiJqk36VbvkDbbV39AI7HY5m9pXVItwYE9%2B9ElTcnBSZiDNQ%2FmO5lx1tSnuvDmhzdzGlCQCfPQVe%2B21Nw03uNuBWoO8HCVivqzfudti579bWiaLW6PuuQQimn449YymVjgV3R36HeQID26jTmAxizDTqOsF1%2FvQc5Zw%3D%3D

但我在 staging/prod 中得到了这个结果,没有域/https 协议(protocol):

http:///account/confirm-email?userId=10&code=CfDJ8JH5BJKUsPZDnCLwFc3HSEHfe9Fk00NHiJqk36VbvkDbbV39AI7HY5m9pXVItwYE9%2B9ElTcnBSZiDNQ%2FmO5lx1tSnuvDmhzdzGlCQCfPQVe%2B21Nw03uNuBWoO8HCVivqzfudti579bWiaLW6PuuQQimn449YymVjgV3R36HeQID26jTmAxizDTqOsF1%2FvQc5Zw%3D%3D

我正在使用 ASP .NET Core 和 "Microsoft.AspNetCore.Mvc": "1.1.0"

应用程序发布到 IIS。

最佳答案

我以前也遇到过同样的问题,下面的代码对我来说工作正常。

var ConfirmLink = Url.Action(
    "ConfirmEmail",
    "Account",
    new { userId = user.Id, code },
    HttpContext.Request.Scheme,
    HttpContext.Request.Host.Value //HttpContext.Request.Host.ToString()
)

或手动

var ConfirmLink = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{Url.Action("ConfirmEmail", "Account")}";

关于c# - 带有协议(protocol)的 Url.Action 返回没有域的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41155149/

相关文章:

c# - XmlSerializer 在反序列化时抛出异常

c# - 如何轻松地从一个解决方案中迁移所有项目

authentication - 企业代理背后的 asp.net core 3.1 azure ad SSO 身份验证

c# - 对象类型是否包含 protected 虚拟 Finalize 方法?

c# - 是否有不使用 OS 管道的类似管道的 .NET Stream 类?

c# - 将强类型列表添加到数据库

asp.net-core - 如何将 Bundle Config 添加到 Startup.cs 以便在 Razor View 中使用资源?

c# - 使用 Asp.Net Core 强制语言环境

c# - 提取文本文件中特定标签之间的内容 - C#

asp.net-core - ASP.NET Core 2.1 身份验证