Azure功能应用引用UINT8_MAX
项目,该项目使用webApi
构建razorEngine
视图。
问题是访问cshtml文件。直到现在我正在使用:
cshtml
访问曾经使用webApi作为独立项目的文件。现在作为引用的程序集,路径的计算结果为
HostingEnvironment.MapPath("~/Views/templates/") + "test.cshtml";
,它不会评估为E:\Web\Proj.Func\bin\Debug\net461\test.cshtml
文件的正确路径。
如何解决这个问题?
答案 0 :(得分:3)
当您将Web API项目添加为对另一个项目的引用,并将其像类库一样使用时,HostingEnvironment.MapPath
将无效。事实上,不再托管的api控制器和HostingEnvironment.IsHosted
是错误的。
作为一个选项,您可以编写代码来查找文件,如下面的代码,然后代码将在两种情况下都有效,当它作为Web API托管或者被用作类库时。
不要忘记将文件包含到输出目录中,因此它们将被复制到Azure Function项目的bin文件夹附近。
using System.IO;
using System.Reflection;
using System.Web.Hosting;
using System.Web.Http;
public class MyApiController : ApiController
{
public string Get()
{
var relative = "Views/templates/test.cshtml";
var abosolute = "";
if (HostingEnvironment.IsHosted)
abosolute = HostingEnvironment.MapPath(string.Format("~/{0}", relative));
else
{
var root = new DirectoryInfo(Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location)).Parent.FullName;
abosolute = Path.Combine(root, relative.Replace("/", @"\"));
}
return System.IO.File.ReadAllText(abosolute);
}
}
这是功能:
[FunctionName("Function1")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
HttpRequestMessage req, TraceWriter log)
{
log.Info("Running");
var api = new MyApiController();
var result = await Task.Run(() => api.Get());
return req.CreateResponse(HttpStatusCode.OK, result);
}
答案 1 :(得分:1)
您可以使用此代码
AppContext.BaseDirectory + "Views\\templates\\" + "test.cshtml"