1

ユーザーの写真を取得するために使用するアクションメソッドがありますが、一部のユーザーは 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);
}

そして、私が使用するWebページで:

<img src='@Url.Action("Picture", new {User.Id})' />

これは、ページを初めてロードしたときは完全に機能しますが、2 回目は画像が表示されません。アクションだけを呼び出すことを確認しましたが、2回目には次のページが表示されます

"Object moved to here."

img タグが画像を読み込んでいないのはそのためです。

これを防ぐ方法はありますか?(リダイレクトによって返される 302 の代わりに) 301 を返すことを推奨する他のスレッドを読みましたが、リンクを含む同じページを返します (実際のリクエストは 301 または 302 ではなく 200 を返します)。

常にリダイレクトを返すように強制する方法についてのアイデアはありますか?

どの画像をページにロードするかを選択するロジックを追加したくありません。また、サーバー上のデータを要求してからページに返したくありません。速度が遅くなり、帯域幅の問題になる可能性があるためです。 .

ご協力いただきありがとうございます。

4

2 に答える 2

0

画像コントローラーでリダイレクトを使用するのではなく、テンプレートの facebook の URL に img src を指定してみませんか....構文が正しいかどうかはわかりませんが (実際、そうではないことは確かです)、次のようなものです。 :

@if(user.IsConnectedWithFacebook)
{
    <img src="http://graph.facebook.com/"......
}
else
{
    <img='@Url.Action("Picture")' />
}

または、よりエレガントで再利用可能にするために、ロジックをコントローラーの静的メソッドに移動します。

<img src="@ProfileController.GetUserImageUrl(id) />

どこ

public static string GetUserImageUrl(long id)
{
    var user = UsersService.GetUser(id);

    if (user.IsConnectedWithFacebook)
    {
       return "http://graph.facebook.com/" + user.GetFacebookId() + "/picture?type=square";
    }
    return Url.Action("Picture");
}
于 2012-04-18T01:53:45.000 に答える
0
if (user.IsConnectedWithFacebook)
{
  var url = "http://graph.facebook.com/" + user.GetFacebookId() + "/picture?type=square";
  return Redirect(url);
}

このコードは new ContentResult() { Content = url }; を返すはずだと思います。代わりは。

また、UI レイヤーでは、アクションのパラメーターで指定された ID を指定することをお勧めします。

<img src='@Url.Action("Picture")' />
于 2012-04-18T00:43:34.613 に答える