ASP.Net MVCコントローラーのディスクから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でディスクからファイルを読み取るためのより良い(または推奨/ベストプラクティス)方法はありますか?
string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));
HttpContext.Current
は「悪」です。それはすべての問題のハンマーではありませんが、それは確かに、例えば、それがOKを行うことができるもののためのセッションよりも優れています。
Web Apiを使用している場合、またはコントローラークラス内で特に使用していない場合は、代わりに次を使用できます。
HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")
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 staticプロパティで表現できます。