【问题标题】:Passing an url as parameter to controller action将 url 作为参数传递给控制器​​操作
【发布时间】:2011-08-17 02:26:41
【问题描述】:

在我的 asp.net mvc 页面上,我需要渲染存储在第三方图像托管服务上的多个图像。该服务有一些 api,它返回一个图像 url 列表。 在 *.cshtml 文件中,有一个 html 标记:

@foreach (var img in Model.Images)
{
   <img src="@img.ImageUrl" />
}

效果很好。但由于某种原因,我不能使用“src”属性中图像的直接 URL。接下来,我创建了应该返回图像的新异步控制器:

public class ImagesController : AsyncController
    {
        //
        // GET: /Images/
        public void GetImageAsync(string url)
        {
            AsyncManager.OutstandingOperations.Increment();
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            AsyncManager.Parameters["response"] = response;
            AsyncManager.OutstandingOperations.Decrement();
        }

        public FileResult GetImageCompleted(WebResponse response)
        {
            return base.File(response.GetResponseStream(), response.ContentType);
        }

    }

现在我需要将完整的图像 url 传递给我的控制器操作。

类似这样的:

@foreach (var img in Model.Images)
    {
       <img src="Images/GetImage/**@img.ImageUrl**" />
    }

如何创建一个新的路由来传递这个参数到action?

谢谢!

【问题讨论】:

    标签: asp.net-mvc url routing parameter-passing


    【解决方案1】:

    你是说这个吗?

    routes.MapRoute(
        "GetImage",
        "Images/GetImage/{*url}",
        new { controller = "Images", action = "GetImageAsync" }
    );
    

    我不确定你为什么需要所有这些。为了获取所有图像 url 的 AsyncController + 路由似乎有点矫枉过正......

    【讨论】:

    • 不,不完全是。例如,我有一个图片网址:example.com/Images/Image1.jpg。我需要在控制器操作中传递这个 url:Images/GetImage/example.com/Images/Image1.jpg - 当然在这种形式下它不起作用
    • 但是您想要做的只是显示这些图像,对吧?您是说您“需要”将这些 url 传递给异步控制器,但我是说您似乎根本不需要任何异步控制器。只需获取所有 url 并将它们呈现到视图中 - 我已经这样做了好几次,我相信它有效。如果该图像托管服务返回的 url 是有效的(例如,如果它们在粘贴到任何浏览器地址栏中时有效),它们将在 img.src 属性中工作...
    • "Images/GetImage/{*url}" - 它几乎可以工作,除了一种情况。当我尝试使用方案(使用“http://”或“https://”)传递 url 时,它不起作用,例如: - 不工作; .我认为双斜杠(“//”)的问题。
    • @Ander.by:(叹气)我仍然不明白你为什么要那样做......但是既然你似乎不相信,只需删除协议 +呈现 URL 之前的双斜杠。或者使用HttpUtility.UrlEncode 对其进行编码并在异步控制器中执行HttpUtility.UrlDecode...
    • 我同意@rsenna - 你让你的生活变得太艰难了。只需制作一个自定义 HTML 帮助器,它对 Image 是强类型的,并使用 TagBuilder 呈现包含图像标签的 MvcHtmlString。将 URL 添加为查询字符串参数。 MvcHtmlString.Create 会自动为你编码。
    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多