【问题标题】:How to get Uri of view returned by action method?如何获取操作方法返回的视图 Uri?
【发布时间】:2013-02-12 10:45:16
【问题描述】:

我需要将一些对象序列化为xml,它具有字符串属性“Url” - 某些操作方法返回的页面的url(在asp.net mvc 3应用程序中我想实现自定义rss)。

我想调用action方法我只需要实例化这个方法所属的控制器:)

MyController c = new MyContrroller();
c.MyActionMethod();

但是如何获取这个action方法返回的页面的url呢??

编辑1:正如@SLaks 回答的那样,我们可以使用Url.Action() 来获取操作方法的url,但是我怎样才能将这个url 传递给xml 文件呢?如果我只是将Url.Action() 的结果分配给link,它将显示字符串:MyController/MyAction。

【问题讨论】:

    标签: c# .net asp.net-mvc-3 uri actionmethod


    【解决方案1】:

    操作方法返回的页面没有 URL。

    相反,操作方法本身具有来自路由引擎的 URL。

    您可以通过调用 Url.Action(actionName, controllerName) 来获取操作的 URL。

    【讨论】:

    • 但是当我将 Url.Action() 的结果序列化为 xml 时,只出现纯文本:MyController/MyAction。如何将action方法返回的url传递给xml文件??
    • @AlekseiChepovoi:您实际上是在询问如何获取您的服务所在的域名。使用HttpContext.Request.Url 属性
    【解决方案2】:

    我认为没有内置的方法可以满足您的需求。您必须手动完成。例如如下:

    public static class UrlExtension
    {
        public static string ToAbsoluteUrl(this string relativeUrl, HttpContext httpContext)
        {
            string http = "http" + (httpContext.Request.IsSecureConnection ? "s" : string.Empty);
            string host = httpContext.Request.Url.Host;
            string port = httpContext.Request.Url.Port == 80 ? string.Empty : string.Format(":{0}", httpContext.Request.Url.Port);            
    
            return string.Format("{0}://{1}{2}{3}", http, host, port, relativeUrl);
        }
    }
    

    例子:

    <a href="@Url.Action("Index", "Home").ToAbsoluteUrl(HttpContext.Current)">Index</a>
    <a href="@Url.Action("TestAction", "Home").ToAbsoluteUrl(HttpContext.Current)">TestAction</a>
    

    渲染结果:

    <a href="http://localhost/">Index</a>
    <a href="http://localhost/Home/TestAction">TestAction</a>
    

    【讨论】:

    • 编译器看不到 Request.IsSecureConnection、Page.ResolveUrl,好像没有这样的方法,或者你的意思是它们是自定义的?反正概念很清楚,不知道为什么我自己没有弄明白:)谢谢!
    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多