为控制器外部的路由创建相对路径

本文关键字:创建 相对 路径 路由 控制器 外部 | 更新日期: 2023-09-27 17:49:38

我正在开发MVC应用程序。

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

private string CreateUserConfirmationLink(string confirmationToken)
{
    return string.Format("http://localhost:14834/Account/RegisterConfirmation?Id={0}", confirmationToken);
}
现在我已经在本地发布了我的应用程序进行测试,我意识到路径是
http://localhost/Appname/...

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

是否有一些方法来生成相对路径并使其工作?

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

为控制器外部的路由创建相对路径

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

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

或:

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

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

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

try this

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