zoukankan      html  css  js  c++  java
  • 无法下载apk等格式的文件的解决方案---ASP .NET Core 2.0 MVC 发布到IIS上以后无法下载apk等格式的文件的解决方案

     ASP .NET Core MVC 发布到  IIS 上以后 无法下载apk等格式的文件

    使用.NET Core MVC创建了一个站点,其他文件可以下载,但是后来又需求,就把手机端的apk合适的文件上传到服务端了,

    即把apk 文件放到网站的wwwroot目录下的Update文件夹下,名字叫apkupdate.apk,

    然后访问:http://192.168.1.219:8080/Update/apkupdate.apk,页面返回给我一个404 not find ,

    错误如下图所示

    上网查看了,说是IIS上没有设置APK 的MIME 的原因,随后设置的APK 的MIME类型,如下

    文件扩展名  .apk, MIME类型:application/vnd.android.package-archive

    然后重启IIS   运行 IISRESET,

    但是设置完后重新打开浏览器,还是返回  

    找不到 192.168.1.219 的网页

    找不到与以下网址对应的网页:http://192.168.1.219:8080/Update/apkupdate.apk

    HTTP ERROR 404
     
    搜索的很多资料才发现原来是  程序导致的,于是回头把程序修改了一下,重新发布,再打开浏览器就可以了下载APK格式的文件了。

    第一种修改方式:

    修改的内容如下:
    在  startup.cs文件中修改(标红部分)

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    app.UseBrowserLink();
    }
    else
    {
    app.UseExceptionHandler("/Home/Error");
    }
    //使用静态文件
    app.UseStaticFiles();


    app.UseStaticFiles(new StaticFileOptions
    {
      //FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
      //设置不限制content-type 该设置可以下载所有类型的文件,但是不建议这么设置,因为不安全
      //ServeUnknownFileTypes = true 
      //下面设置可以下载apk和nupkg类型的文件
      ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
      {
        { ".apk","application/vnd.android.package-archive"},
        { ".nupkg","application/zip"}
      })
      });
      app.UseStaticFiles();
      app.UseSession();
      app.UseMvc(routes =>
    {
      routes.MapRoute(
      name: "default",
      template: "{controller=Login}/{action=Index}/{id?}");
    });
    //InitializeData.Initialize();
    }

    第二种修改方式:

    这个问题感谢@蜗牛往前走的指点,所以才记起因为iis只是一个代理了,所以自己捣鼓了一个解决方案,就是在appsettings.json配置里面配置

    如下

    在到设置Startup.cs的添加代码

     public void ConfigureServices(IServiceCollection services)
            {
                services.Configure<Dictionary<string,string>>(Configuration.GetSection("Mime"));
                services.AddMvc();
                services.AddDbContext<ApplicationDataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection")));
            }
     
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<Dictionary<string, string>> option)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseBrowserLink();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }
                // app.UseStaticFiles()  //使用新的配置文件方式使用
                var provider = new FileExtensionContentTypeProvider();
                foreach(string key in option.Value.Keys)
                {
                    provider.Mappings.Add(key, option.Value[key]);
                }
                app.UseStaticFiles(new StaticFileOptions() { ContentTypeProvider = provider });
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
            }

     因为FileExtensionContentTypeProvider默认的构造函数mime基本已经定死了 而。NET core的网站 很多是不采取iis设置的FileExtensionContentTypeProvider代码地址 大家可以去看看https://github.com/aspnet/StaticFiles/blob/dev/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs

    参考链接:https://www.cnblogs.com/dotnet-org-cn/p/7566724.html

  • 相关阅读:
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
    EUI库
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/9517115.html
Copyright © 2011-2022 走看看