MVC 5 - 提供静态txt文件,给出404错误

时间:2018-02-20 23:03:37

标签: asp.net-mvc asp.net-mvc-5 .net-4.6

我必须在此路径中的mvc 5网站的网址中公开txt文件:www.mysite.com/home/somefile.txt

.Net MVC抛出404错误。

我已经在web.config上添加了处理程序

    <add name="MyTxt" 
       path="/home/riot.txt" 
       verb="GET" 
       type="System.Web.Handlers.TransferRequestHandler" 
       preCondition="integratedMode,runtimeVersionv4.0" />

我还需要做些什么呢?

[编辑1] 我创建了这样的路线

            routes.MapRoute(
            name: "FileRoute",
            url: "home/txt.txt",
            defaults: new { controller = "Home", action = "GetFile" }
        );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

我改变了web.config

<modules runAllManagedModulesForAllRequests="true">

这是我的控制器

        public FileResult GetFile()
    {
        byte[] fileBytes = System.IO.File.ReadAllBytes(Path.Combine(HostingEnvironment.ApplicationPhysicalPath,"riot.txt"));
        string fileName = "riot.txt";
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
    }

它在网址上引发404错误:http://localhost:10021/home/riot.txt

[编辑2] 在这种情况下我把正确的home/riot.txt放进后,我输错了路线模式。我工作。谢谢你们。

2 个答案:

答案 0 :(得分:2)

似乎你有一个可以捕获所有/home个请求的根 - 这在MVC模板中很常见。最简单的方法是更改​​文件路径:

/files/test.txt

但是,如果您想使用/home路径投放文件,则应更改HomeController的名称,做好工作:

  1. 在名为GetTxt()的家中创建一个操作,例如
  2. 使用此模式在您的主路线之前定义路线:

    /home/txt.txt

  3. 通过在web.config路径中设置runAllManagedModulesForAllRequests属性,为system.webServer/modules中的所有请求启用所有模块:

                  
     

  4. 但我不建议这样做。

答案 1 :(得分:0)

〜/解析为应用程序根目录。

/解析为网站根目录。

 Path="/Home/txt.txt"

在asp.net

中使用此~/推荐
 Path="~/Home/txt.txt"