为控制器外部的路由创建相对路径
本文关键字:创建 相对 路径 路由 控制器 外部 | 更新日期: 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});
}