41

ASP.NetMVCコントローラーのディスクからXSLTファイルを読み取ろうとしています。私がしていることは次のとおりです。

string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);

ただし、forums.asp.netのこのスレッドの途中に、次の引用があります

HttpContext.Currentは悪であり、MVCアプリのどこかで使用すると、必要ないために何か間違ったことをしていることになります。

私は使用していませんCurrentが、MVCでファイルの絶対物理パスを決定するための最良の方法は何でしょうか?どういうわけか(理由はわかりHttpContextません!)私には適切ではありません。

ASP.Net MVCでディスクからファイルを読み取るためのより良い(または推奨/ベストプラクティス)方法はありますか?

4

3 に答える 3

76
string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));

HttpContext.Current私は「悪」という考えに同意しません。それはすべての問題のハンマーではありませんが、たとえば、それがうまくいくことができるもののためのセッションよりも確かに優れています。

于 2010-05-14T14:40:35.890 に答える
15

WebApiを使用している場合、または特にコントローラークラス内で使用していない場合は、代わりに次を使用できます。

HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")
于 2015-05-06T00:50:13.717 に答える
10

DIフレームワークによってコントローラーコンストラクターにサイトルートパスを注入します。

public class HomeController: Controller
{
    private readonly string _siteRoot;
    public HomeController(string siteRoot)
    {
        _siteRoot = siteRoot;
    }

    public ActionResult Index()
    {
        string filePath = Path.Combine(_siteRoot, @"Content\Xsl\pubmed.xslt");
        return File(filePath, "text/xml");
    }
}

サイトルートパスに関する限り、HostingEnvironment.ApplicationPhysicalPath静的プロパティで表すことができます。

于 2010-05-15T08:13:44.027 に答える