2016-12-15 40 views
7

我使用Url.Action来生成一个绝对URL来发送电子邮件。该链接在控制器内部生成。Url.Action与协议正在返回一个没有域的链接

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 

但我有这样的结果,不包括域名/ https协议,在分期/生产:

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

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

发布到IIS的应用程序。

+0

你试过没有指定的协议? – ColinM

+0

@ColinM仍然是同样的问题:'http:/// account/confirm-email?userId = 8&code = ...' –

+0

Url.Action'是否在视图或代码中的任何地方返回完整的URL? – ColinM

回答

0

尝试增加主机参数:

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

即使对于主机,它也不起作用。 –

+0

您可以添加调试代码并查看生产环境中的HttpContext.Request.Host.Host的值是什么? – Ross

0

我曾经有过同样的问题前,下面的代码工作正常,我。

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")}";