为什么不应该';我不能从ASP.NET ApiController返回HTML吗?

为什么不应该';我不能从ASP.NET ApiController返回HTML吗?,asp.net,owin,Asp.net,Owin,查看自托管OWIN应用程序的教程,这些教程都指向使用ApiController。此代码适用于: public class MapController : ApiController { // Get /map public async Task<HttpResponseMessage> Get() { return await Task.Run(() => { string html = File.ReadAll

查看自托管OWIN应用程序的教程,这些教程都指向使用ApiController。此代码适用于:

public class MapController : ApiController
{
    // Get /map
    public async Task<HttpResponseMessage>  Get()
    {
        return await Task.Run(() => {
            string html = File.ReadAllText("./Client/html/MapExample.html");
            HttpResponseMessage response = new HttpResponseMessage
            {
                Content = new StringContent(html)
            };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
            return response;
        });
    }
}
公共类映射控制器:ApiController
{
//获取/映射
公共异步任务Get()
{
返回等待任务。运行(()=>{
字符串html=File.ReadAllText(“./Client/html/MapExample.html”);
HttpResponseMessage响应=新的HttpResponseMessage
{
内容=新的字符串内容(html)
};
response.Content.Headers.ContentType=新的MediaTypeHeaderValue(“文本/html”);
返回响应;
});
}
}
这似乎奏效了。。。为什么我要扩展
控制器
ApiController


实际上,我没有访问OWIN库中的
控制器
类的权限…

从API控制器返回Html在功能上没有问题

您不想这样做的唯一原因是,按照惯例,API控制器用于公开服务功能,而ASP.NET MVC控制器用于为网站或页面提供服务


因此,一些开发人员会被这种方法弄糊涂

“你为什么在这里使用任务?”梅森,只是因为我不知道什么更好。我的想法是希望文件io是异步的。对吗?什么是更好的方法?不要预先优化。这很糟糕。如果性能不是一个问题,那么现在您只是无缘无故地将代码变得更加复杂。谢谢。如果我真的想异步加载文件,有没有更好的方法呢?同样,听起来你想预优化。别这样。异步不能神奇地解决问题。在应用程序启动时,将视图的HTML读入内存会更有意义,这样一来,每次需要返回一些HTML时,您就不需要访问光盘了。谢谢。我是asp.net新手,一直在努力了解owin。所有教程都使用ApicController。