使用输入类型=“文件”与ASP.Net和iPad和IIS的Windows集成身份验证

问题描述:

我试图做一个非常枯燥的旧的HTML页面使用input type="file"上传一个.aspx页面,它们都在启用了Windows集成身份验证(不是匿名)的IIS上(IIS7和IIS8)托管。它适用于桌面版的Chrome,但如果我在iPad上使用Chrome或Safari,我可以登录(通过Windows身份验证)并查看表单,但是如果我选择一个文件并单击发送,它就位于旋转。如果我不要挑选一个文件,它工作正常。如果我从Windows Auth切换到匿名身份验证,即使在iPad上也可以正常工作。我选择的文件仅来自iPad的照片库(最初是用内置相机拍摄的),当测试Chrome的桌面时,我使用完全相同的文件(很小,1.4米)进行测试。使用输入类型=“文件”与ASP.Net和iPad和IIS的Windows集成身份验证

下面是default.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.html,并upload.aspxtest目录C:\inetpub\wwwroot下,然后使用IIS管理器将其转换成使用默认设置的应用程序,以及匿名验证切换到Windows身份验证。 (但是,这是一个更复杂的项目,确实有一个Web.config的MCVE,我刚刚被剥离的东西回骨查找问题。)

总结一下:

  • 在Chrome的工作就好了在桌面上
  • 作品就好了iPad上,如果我不选择一个文件
  • 作品在iPad上就好了,如果我切换到匿名身份验证,而不是Windows验证和选择一个文件
  • 如果我使用Win,永远在iPad上旋转dows验证并使用Chrome或Safari挑选文件用于iPad

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

+0

你有没有找到这方面的解决方案?我遇到类似的问题,当我尝试上传文件时,集成的win auth失败。 –

+0

@SayanPal:可悲的是:https://*.com/a/46888408/157247(你的时间是特殊的,我只证实了一个星期前)。 –

+0

感谢您的及时回复:)我面对Win 10的这个问题;我可能会问一个新问题。 –

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

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

+0

您是否还记得苹果公司的主题(网址或帖子),指出该问题已在iOS 11.0中解决? :D –

+0

@PhucNguyen:我只用实验证明过:我的测试iPad(更重要的是,我的客户的iPad)在v10.3上可靠地复制了问题(在Safari和Chrome中),然后我的升级没有到v11。然后,我使用v11 iPad上运行的完全相同的页面,在运行v10.3的测试iPhone上复制了该问题。 –

+0

为了得到我的问题。我的客户将他们的设备升级到iOS v11.2.5,问题就消失了。所以,我的票已经解决了。感谢您的信息 –

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

+0

这对我无效(我使用IIS管理器单击身份验证并从列表中选择“Negotiate:Kerberos”,禁用内核模式身份验证,因为它与它不兼容)。你做了不同的事情吗?你所做的细节会使答案更有用。 –