1

我正在开发 MVC 应用程序。

对于测试,我生成的 url 如下

private string CreateUserConfirmationLink(string confirmationToken)
{
    return string.Format("http://localhost:14834/Account/RegisterConfirmation?Id={0}", confirmationToken);
}

现在我已经在本地发布了我的应用程序进行测试,我意识到路径是

http://localhost/Appname/...

所以,我生成的 url 不再起作用了。如何生成适用于所有情况的 url?

有没有办法生成相对路径并使其工作?

PS:此方法在我的一个存储库中,而不是在控制器中。

4

2 回答 2

0

生成操作的“服务器”地址,然后附加查询字符串:

return string.Format(Url.Action("RegisterConfirmation", "Account")+"?Id={0}", confirmationToken);

或者:

return string.Format(Url.Action("RegisterConfirmation", "Account", new {Id = confirmationToken });

如果你需要一个完整的绝对网址,你可以使用第三个版本:

return string.Format(Url.Action("RegisterConfirmation", "Account", new {Id = confirmationToken }, Request.Url.Scheme);

如果您需要在其中一个控制器之外生成完整的 url,请使用HttpContext.Current.Request.Url.Scheme而不是Request.Url.Scheme. 为了利用Url.Action,如果您CreateUserConfirmationLink从您的控制器之一调用您的方法(我假设您这样做),您可以修改该方法以将 UrlHelper 作为输入参数:

private string CreateUserConfirmationLink(string confirmationToken, UrlHelper urlHelper)
{
    return string.Format(urlHelper.Action("RegisterConfirmation", "Account", new {Id = confirmationToken }, HttpContext.Current.Request.Url.Scheme);
}

编辑:对于 .Net 4 及更高版本,可以从当前上下文中实例化 UrlHelper:

private string CreateUserConfirmationLink(string confirmationToken)
{
    UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);

    return string.Format(urlHelper.Action("RegisterConfirmation", "Account", new {Id = confirmationToken }, HttpContext.Current.Request.Url.Scheme);
}
于 2014-03-11T08:26:31.183 回答
0

尝试这个

private string CreateUserConfirmationLink(string confirmationToken)
    {
       return string.Format(Url.Action("RegisterConfirmation", "Account", new {Id = confirmationToken});

    }
于 2014-03-11T08:30:52.983 回答