2016-12-15 79 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")}";