MVC:为控制器外的路由创建相对路径?

时间:2014-03-11 08:21:45

标签: c# asp.net-mvc asp.net-mvc-routing relative-url

我正在研究MVC应用程序。

对于测试我正在生成URL如下

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

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

http://localhost/Appname/...

所以,我正在生成的网址不再起作用了。 如何生成适用于所有案例的网址?

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

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

2 个答案:

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

    }