【发布时间】:2012-04-29 09:03:37
【问题描述】:
我有一个用于检索用户图片的操作方法,但是我的一些用户可能使用 Facebook 登录,我不想返回存储的图片而是来自 Facebook 的图片,所以我正在尝试像这样:
public ActionResult Picture(long id)
{
var user = UsersService.GetUser(id);
if (user.IsConnectedWithFacebook)
{
var url = "http://graph.facebook.com/" + user.GetFacebookId() + "/picture?type=square";
return Redirect(url);
}
return File(user.PictureData, user.PictureContentType);
}
在我刚刚使用的网页上:
<img src='@Url.Action("Picture", new {User.Id})' />
这在我第一次加载页面时完美运行,但是第二次没有显示图像。我检查了是否只调用了该操作,第二次它显示了一个带有
的页面"Object moved to here."
这就是 img 标签没有加载任何图像的原因。
有没有办法防止这种情况发生?我在其他一些线程中读到人们建议返回 301(而不是 Redirect 返回的 302),但它返回与链接相同的页面(并且实际请求返回 200 而不是 301 或 302)。
关于如何强制它始终返回重定向的任何想法?
我真的不想添加逻辑来选择要加载到页面的图像,我也不想在服务器上请求数据然后将其返回到页面,因为它可能会很慢并且变得带宽问题。
感谢您的帮助。
【问题讨论】:
-
就带宽和性能而言,重定向选项需要两次往返服务器才能提供图像。这是一个相关的问题:stackoverflow.com/questions/3778347/…
-
我知道这一点,但我非常有信心向 FB 服务器发出第二个请求会好得多。在另一种情况下,我必须在控制器中向 FB 服务器创建一个 Web 请求,获取数据,然后将其返回给客户端。这意味着无论如何都会发生第二个请求,但在这种情况下,我的服务器将浪费带宽,而不是客户端)。
-
我看不出您需要将实际图像从 FB 传输到 Web 服务器的任何原因。我同意,那将是一个非常糟糕的设计。绝对不是我提议的。
-
你有没有找到解决这个问题的方法。我自己也碰到了。我也不想使用视图逻辑,因为我将处理多个客户端。
标签: asp.net-mvc redirect