【问题标题】:Using input type="file" with ASP.Net and iPad and IIS's Windows Integrated Authentication在 ASP.Net 和 iPad 以及 IIS 的 Windows 集成身份验证中使用 input type="file"
【发布时间】:2017-10-15 19:05:40
【问题描述】:

我正在尝试使用input type="file" 在一个无聊的旧 HTML 页面上上传一个非常基本、简洁的文件,该页面发布到一个 .aspx 页面,两者都托管在具有 Windows 集成身份验证的 IIS(IIS7 和 IIS8)上启用(非匿名)。它在桌面版 Chrome 上运行良好,但如果我在 iPad 上使用 Chrome 或 Safari,我可以登录(以通过 Windows 身份验证)并查看表单,但如果我选择一个文件并单击发送,它只是坐下来旋转。如果我选择一个文件,它可以正常工作。如果我从 Windows Auth 切换到 Anonymous Auth,它可以正常工作,即使在 iPad 上也是如此。我选择的文件只是来自 iPad 的照片库(最初是用内置相机拍摄的),在测试桌​​面版 Chrome 时,我正在测试完全相同的文件(很小,1.4M)。

这是默认的.html:

<!doctype html>
<html>
<head>
    <title>Upload Test</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data" action="upload.aspx">
    <input type="file" name="foo" />
    <input type="submit" value="Send" />
    </form>
</body>
</html>

upload.aspx:

<%@ Page Language="C#" CodeBehind="upload.aspx.cs" Inherits="UploadTest.Upload" %>

upload.aspx.cs:

using System;
using System.Web.UI;

namespace UploadTest
{
    public partial class Upload : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Response.ContentType = "text/plain";
            this.Response.Write("Got here");
            this.Response.End();
        }
    }
}

请注意,我什至没有尝试在上面访问 this.Request.Files,尽管如果我这样做了,例如:

var file = this.Request.Files["foo"];
this.Response.Write("Filename: " + (file == null ? "(no file)" : file.FileName));

...我确实看到文件名在它工作的情况下。

我没有Web.config:我只是将bindefault.htmlupload.aspx 复制到test 目录下C:\inetpub\wwwroot,然后使用IIS 管理器将其转换为具有默认设置,然后从匿名身份验证切换到 Windows 身份验证。 (但这是一个更复杂的项目的 MCVE,它确实有一个 Web.config,我只是从根本上剥离了一些东西来找出问题所在。)

回顾一下:

  • 在桌面版 Chrome 中运行良好
  • 如果我不选择文件,在 iPad 上也可以正常工作
  • 如果我切换到匿名身份验证而不是 Windows 身份验证并选择一个文件,则在 iPad 上工作正常
  • 如果我使用 Windows Auth 并使用适用于 iPad 的 Chrome 或 Safari 选择文件,则在 iPad 上永远旋转

我不是 ASP.net 大佬。我究竟做错了什么?我需要翻转一些配置开关吗?

【问题讨论】:

    标签: ios asp.net ipad iis windows-authentication


    【解决方案1】:

    我切换到使用 Kerberos 安全身份验证协议而不是 NTLM 协议,并且上传开始为我工作。

    【讨论】:

    • 这对我不起作用(我使用 IIS 管理器单击身份验证并从列表中选择“协商:Kerberos”,禁用内核模式身份验证,因为它与它不兼容)。你做了什么不同的事情吗?您所做的详细信息将使答案更加有用。
    【解决方案2】:

    据我所知,这是 iOS (!) 中的一个错误,它已在 iOS 11.0 中修复。与 v10.3 不兼容的完全相同的配置适用于 v11。

    不幸的是,iOS 11.0 will only be made available for 5th gen onward,所以我们不得不通过File API 读取文件并将其作为非文件数据批量发送到服务器来解决这个问题。 丑陋解决方法,但这是唯一有效的方法。

    【讨论】:

    • 您还记得 Apple 的主题(URL 或帖子)说问题已在 iOS 11.0 中得到修复吗? :D
    • @PhucNguyen:我只是通过实验证明了这一点:我的测试 iPad(更重要的是,我客户的 iPad)在 v10.3(在 Safari 和 Chrome 中)上可靠地复制了这个问题,然后我的没有不是在升级到 v11 之后。然后,我在运行 v10.3 的测试 iPhone 上使用与 v11 iPad 完全相同的页面复制了该问题。
    • 回答我的问题。我的客户将他们的设备升级到 iOS v11.2.5,问题就消失了。这样,我的票就解决了。谢谢你的信息
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多