0

少し前に、認証ルーチンに次のコードがありました。

 protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            string returnUrl = Request.QueryString["ReturnUrl"];   
            if (!string.IsNullOrEmpty(returnUrl))
            {
                // download file from server

                Response.Redirect(returnUrl);
            }
        }

returnUrlはサーバー上のファイルへのフルパスであるため、以前はこの方法でブラウザのダウンロード標準ダイアログを介してファイルをダウンロードしていました。しかし、今度は、ファイルをダウンロードすると同時に、認証の直後にユーザーを別のページにリダイレクトする必要があります。だから今私はのようなものが必要です

{
    // download file from server
    Response.Redirect(returnUrl);
    Response.Redirect("/");
}

私はそれを正しく行う方法を見つけることができません。私は多くのアプローチを試しましたが、何も役に立ちませんでした。重要な注意点は、ダウンロードにのみ使用され、必要なページにリダイレクトされるdownload.aspxのような中間ページを使用できないことです。だから、私が使用したアプローチ:

1.1。

Response.Redirect(returnUrl, false);
Response.Redirect("/");

結果:ファイルはダウンロードされず、即時リダイレクトが発生します。

2.2。

Response.Redirect(returnUrl, false);
Response.Redirect("/", false);

結果:何も起こりません。

3.3。

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + returnUrl);
Response.TransmitFile(Server.MapPath("~" + returnUrl));
Response.End();
Response.Redirect("/");

結果:ファイルはダウンロードされますが、リダイレクトされません。Response.End();リダイレクトの削除が発生したが、ファイルがロードされていない場合。

  1. 次の変更を加えた以前のバリアント:追加:Response.AddHeader( "Refresh"、 "3; URL = /home.aspx");

削除:Response.Redirect( "/");

結果:ファイルはダウンロードされていますが、更新/リダイレクトは行われません。

  1. ファイルのダウンロードに使用されるJavaScript:

Response.Write( "language ='javascript'> window.location.assign('returnUrl'、'download'、'');"); Response.Redirect( "/");

結果:ファイルがロードされていません。リダイレクトが発生します。Response.Writeパラメータを。に置き換えました"<script>alert('test');</script>"。アラートは表示されず、リダイレクトが発生します。

何が問題なのか分かりますか?

4

1 に答える 1

4

asp.netフォーラムのヘルプがあります。ここにあります。許可されたユーザーをリダイレクトする必要があるページに次のコードを配置しました。

<%--We use iframe and script below for downloading files by not authorized users via direct links--%>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        iframeFile.Attributes["src"] = Request.QueryString["file"];
    }
</script>

 <asp:Content ContentPlaceHolderID="masterContent" runat="server">

    <div>
        <iframe id="iframeFile" runat="server" style="display: none;"></iframe>
    </div>

サインインページのコードビハインドで、ファイルをダウンロードするための次のフラグメントを作成しました。

string returnUrl = Request.QueryString["ReturnUrl"];
if (!string.IsNullOrEmpty(returnUrl))
{
    Response.Redirect("/?file=" + Server.UrlEncode(returnUrl));
}

これで問題は解決しました。

于 2013-02-24T11:57:06.387 に答える