0

コントローラー アクションからパスを指定して特定の aspx ページを返すにはどうすればよいですか?

コントローラーアクションからリダイレクトする方法は次のとおりです。

Response.Redirect("_PDFLoader.aspx?Path=" + FilePath  +  id + ".pdf");

次のことも試しました:

return Redirect("_PDFLoader.aspx?Path=" + FilePath + id + ".pdf");

ここに私の _PDFLOader.aspx ページがあります:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="_PDFLoader.aspx.cs" Inherits="Proj._PDFLoader" %>

ここに私のCodeBehindファイルがあります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace Proj
{
    public partial class _PDFLoader : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string OutfilePath = Request.QueryString["Path"].ToString();
            FileStream objfilestream = new FileStream(OutfilePath, FileMode.Open, FileAccess.Read);
            int len = (int)objfilestream.Length;
            Byte[] documentcontents = new Byte[len];
            objfilestream.Read(documentcontents, 0, len);
            objfilestream.Close();

            if (File.Exists(OutfilePath)) File.Delete(OutfilePath);       

            Response.ContentType = "application/pdf";
            Response.AddHeader("content-length", documentcontents.Length.ToString());
            Response.BinaryWrite(documentcontents);

        }
    }
}

どんな助けでも大歓迎です。

4

1 に答える 1

4

以下が機能するはずです。

public class SomeController: Controller
{
    public ActionResult SomeAction() 
    {
        return Redirect("~/_PDFLoader.aspx?Path=" + Url.Encode(FilePath + id) + ".pdf"");
    }
}

しかし、私が見る限り、この_PDFLoader.aspxWebFrom が行うことは、ファイルを提供してから削除することだけです。コントローラー アクションから直接これを行うことができます。

public class SomeController: Controller
{
    public ActionResult SomeAction() 
    {
        string path = FilePath + id + ".pdf";
        if (!File.Exists(path))
        {
            return HttpNotFound();
        }
        byte[] pdf = System.IO.File.ReadAllBytes(path);
        System.IO.File.Delete(path);
        return File(pdf, "application/pdf", Path.GetFileName(path));
    }
}

ファイルをダウンロードする代わりにインラインで表示する場合は、次のようにします。

return File(pdf, "application/pdf");
于 2012-10-12T13:44:57.497 に答える