我正在研究MVC应用程序。
对于测试我正在生成URL如下
private string CreateUserConfirmationLink(string confirmationToken)
{
return string.Format("http://localhost:14834/Account/RegisterConfirmation?Id={0}", confirmationToken);
}
现在我已经在本地发布我的应用程序进行测试,我意识到路径是
http://localhost/Appname/...
所以,我正在生成的网址不再起作用了。 如何生成适用于所有案例的网址?
有没有办法生成相对路径并使其有效?
PS:此方法位于我的某个存储库中,而不是在控制器中。
答案 0 :(得分: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);
如果您需要在其中一个控制器外生成完整网址,请使用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);
}
答案 1 :(得分:0)
试试这个
private string CreateUserConfirmationLink(string confirmationToken)
{
return string.Format(Url.Action("RegisterConfirmation", "Account", new {Id = confirmationToken});
}