【问题标题】:ASP.NET MVC create absolute url from c# codeASP.NET MVC 从 c# 代码创建绝对 url
【发布时间】:2016-02-24 04:07:44
【问题描述】:

如何从 c# 代码生成绝对 url?

我想生成这样的网址:localhost/{controller}/{action}/{id}。有没有办法在 c# 中做到这一点,就像在视图中一样?

它不会在控制器内部生成,而是在 ViewModel 内部生成。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:
    string absUrl = Url.Action("Index", "Products", null, Request.Url.Scheme);
    

    只需添加Request.Url.Scheme。它的作用是向 url 添加一个协议,强制它生成一个绝对 URL。

    【讨论】:

    • 谢谢,这个隐藏的太好了,我差点用Url.RouteUrl
    • 如果你想使用 Url.Action("Index") 重载(不指定控制器)生成一个完全限定的 url,只需传入 null 作为控制器参数。这导致:Url.Action("Index", null, null, Request.Url.Scheme) .
    【解决方案2】:

    查看类似的问题Using html actionlink and URL action from inside controller。似乎与您的要求相似且可重复使用。

    【讨论】:

    • OP 说它不会在控制器内部生成,而是在视图模型内部生成。
    【解决方案3】:

    如果您不想“构建” url,而只想要当前页面的完整路径,这可以解决问题

    Context.Server.UrlEncode(Context.Request.Url.AbsoluteUri)

    我知道它不像扩展方法那么优雅,但我想出于教育目的分享它

    【讨论】:

      【解决方案4】:

      截至MVC 的最新更新,您可以在overload 下方使用Url.Action

      string url=Url.Action("ActionName", "Controller", 
                             new RouteValueDictionary(new { id= someid }), 
                                                            //url param
                             HttpContext.Request.Url.Scheme, 
                             HttpContext.Request.Url.Host);
      

      生成

      http://localhost:port/Controller/ActionName?id=someid
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-12
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多